Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)에서 문자열을 딕셔너리(dict)로 변환하는 방법

개요

파이썬을 사용하다 보면 파일에서 읽어 온 데이터나 외부 입력값처럼 문자열 형태로 저장된 딕셔너리를 실제 dict 객체로 변환해야 하는 경우가 자주 발생합니다. 이때 대표적으로 활용되는 방법은 ast.literal_eval()json.loads() 두 가지입니다.

1. ast.literal_eval() 사용하기

ast.literal_eval()은 문자열을 파이썬 표현식으로 안전하게 평가해 주는 함수입니다. 일반적인 eval()과 달리 임의의 코드를 실행하지 않으며, 문자열, 숫자, 튜플, 리스트, 딕셔너리, 불리언(Boolean), None과 같은 파이썬 리터럴 구조만 허용하기 때문에 보안 측면에서 훨씬 안전합니다.

>>> import ast
>>> x = ast.literal_eval("{'foo': 'bar', 'hello': 'world'}")
>>> type(x)
<class 'dict'>

위 예제에서 볼 수 있듯이, 작은따옴표로 묶인 파이썬 스타일의 딕셔너리 문자열도 문제없이 변환됩니다.

2. json 모듈 사용하기

변환하려는 문자열이 JSON 형식이라면 표준 라이브러리의 json 모듈에 포함된 json.loads() 함수를 사용할 수도 있습니다.

>>> import json
>>> x = json.loads('{"foo": "bar", "hello": "world"}')
>>> type(x)
<class 'dict'>

주의: JSON 규격에서는 키와 값으로 사용되는 문자열을 반드시 큰따옴표(")로 감싸야 합니다. 따라서 작은따옴표(')로 작성된 문자열을 그대로 전달하면 JSONDecodeError가 발생할 수 있으니, JSON 형식에 맞게 문자열을 준비해야 합니다.

두 방식의 비교 및 정리

- ast.literal_eval(): 파이썬 리터럴 문법(작은따옴표 포함)을 그대로 처리할 수 있으며, 코드 실행 위험이 없어 안전합니다.
- json.loads(): 엄격한 JSON 규격을 따르므로 큰따옴표 사용이 필수이지만, JSON 데이터를 다룰 때는 가장 표준적인 선택입니다.

결론적으로, 신뢰할 수 있는 소스의 파이썬 스타일 문자열이라면 ast.literal_eval()을, JSON 형식의 데이터라면 json.loads()를 사용하는 것이 좋습니다.