-
[python]str을 dict로 바꾸는 두 가지 방법Programming/python 2021. 1. 24. 18:23
dict는 string으로 변경할 수 있는 데, string은 dict로 변경할 수 없다
dict1 = {"a":"b", "c":"d"} str1 = str(dict1) print(str1) # 실행 결과 {"a":"b", "c":"d"}
딕셔너리 타입을 str로 형 변환을 하면 원하는 것처럼 알맞게 잘 출력한다. 하지만 이 str을 다시 딕셔너리 타입을 변경하려고 하면 에러가 발생한다.
dict1 = '{"a":1, "b":2}' print(dict(dict1)) # 실행 결과 dictionary update sequence element #0 has length 1; 2 is required
str을 dict로 바꾸는 방법
1. string으로 형 변환된 것을 eval을 사용해서 코드화 한다.
str1 = '{"a":1, "b":2}' print(eval(str1)) print(type(eval(str1))) # 실행 결과 {"a":1, "b":2} <class 'dict'>
eval은 문자로 된 것을 코드화하는 함수다. 보안 문제가 염려된다면 아래 literal_eval을 사용하자
from ast import literal_eval str1 = '{"a":1, "b":2}' print(literal_eval(str1)) print(type(eval(str1))) # 실행 결과 {"a":1, "b":2} <class 'dict'>
2. json을 핸들링 할 경우에는 json.loads를 사용해서 불러오자
import json dic2 = '{"zdfasdf":"zxcvsddg","zxcadsf":"zxcfsd"}' print(json.loads(dic2)) # 실행 결과 {"zdfasdf":"zxcvsddg","zxcadsf":"zxcfsd"}
하지만 주의해야할 것이 있다. json의 형식과 python의 딕셔너리의 형식이 비슷하지만 완전히 같지는 않기 때문에 호환되지 않는 점들이 몇 가지 있다.
예를 들면 파이썬에서는 boolean을 False, True로 표현하지만 json에서는 소문자로 false, true로 표현한다.
그리고 json 문법에서는 안에를 큰 따옴표, 즉 " 로 묶는 것이 컨벤셔널한 방법이다. 그래서 위 코드를 아래와 같이 바꿔쓰게 된다면
import json dic2 = "{'zdfasdf':'zxcvsddg','zxcadsf':'zxcfsd'}" print(json.loads(dic2)) # 실행 결과 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
이렇게 json decoder 에러를 내뱉는다.
'Programming > python' 카테고리의 다른 글
[에러로그]parquet파일 변환 fastparquet v.s pyarrow (0) 2021.11.19 파이썬 데코레이터에서 wraps를 사용해야 하는 이유 (0) 2021.06.27 파이썬 제너레이터(Generator) (0) 2020.06.06 (python)'is None'과 '==None'의 차이점 (0) 2020.02.27 (python)날짜로 파일 제목 만들기 (0) 2019.12.09