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

파이썬에서 문자열로 표현된 딕셔너리를 딕셔너리 객체로 변환하는 방법

문자열로 표현된 딕셔너리를 파이썬 객체로 변환하기

파이썬에서는 딕셔너리(dict)가 문자열 형태로 저장되거나 파일, API 응답 등을 통해 전달되는 경우가 많습니다. 문자열 상태로는 키나 값에 직접 접근할 수 없기 때문에, 이를 다시 딕셔너리 객체로 변환하는 과정이 필요합니다. 대표적인 방법으로 ast.literal_eval()json.loads() 두 가지가 있습니다.

방법 1: ast.literal_eval() 사용

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

import ast

s = "{'baz': 'lol', 'foo': 'bar'}"
d = ast.literal_eval(s)

print(d['foo'], d['baz'])

실행 결과:

bar lol

방법 2: json 모듈 사용

딕셔너리는 JSON 문자열과 구조가 매우 유사하므로, json 모듈의 loads() 함수를 사용해서도 변환할 수 있습니다. 단, JSON 규격에서는 키와 문자열 값을 반드시 큰따옴표(")로 감싸야 하며, 작은따옴표(')를 사용하면 JSONDecodeError가 발생한다는 점에 유의해야 합니다.

import json

s = '{"foo": "bar", "hello": "world"}'
x = json.loads(s)

print(type(x))
print(x['hello'])

실행 결과:

<class 'dict'>
world

두 방법의 비교 및 선택 기준

  • ast.literal_eval(): 작은따옴표, 튜플, None, True/False 등 파이썬 고유의 문법을 그대로 처리할 수 있으며, 신뢰할 수 없는 외부 입력이라도 안전하게 평가됩니다.
  • json.loads(): 변환 속도가 빠르고 JSON 데이터 처리에 최적화되어 있지만, 큰따옴표 사용 등 엄격한 JSON 형식을 요구합니다.

API 응답이나 설정 파일처럼 JSON 형식이 보장된 데이터라면 json.loads()를, 파이썬 코드 내부에서 생성된 딕셔너리 문자열이라면 ast.literal_eval()을 사용하는 것이 좋습니다. 상황에 맞는 도구를 선택하면 더 안정적이고 효율적으로 문자열을 딕셔너리로 변환할 수 있습니다.