딕셔너리를 문자열로 변환하기
파이썬에서는 내장 함수 str()을 사용하면 딕셔너리 객체를 아주 간단하게 문자열로 변환할 수 있습니다.
>>> D1 = {'1': 1, '2': 2, '3': 3}
>>> D1
{'1': 1, '2': 2, '3': 3}
>>> str(D1)
"{'1': 1, '2': 2, '3': 3}"반대로 문자열을 다시 딕셔너리로 변환하려면, 먼저 해당 문자열이 유효한 딕셔너리 표현을 담고 있는지 확인해야 합니다. 대표적인 방법 두 가지를 소개합니다.
방법 1: eval() 함수 사용
eval() 함수는 문자열을 파이썬 표현식으로 평가하여 실행하므로, 딕셔너리 형태의 문자열을 그대로 딕셔너리 객체로 되돌릴 수 있습니다.
>>> D1 = {'1': 1, '2': 2, '3': 3}
>>> s = str(D1)
>>> s
"{'1': 1, '2': 2, '3': 3}"
>>> D2 = eval(s)
>>> D2
{'1': 1, '2': 2, '3': 3}주의: eval()은 문자열에 포함된 모든 파이썬 코드를 그대로 실행하기 때문에, 신뢰할 수 없는 외부 입력(예: 사용자 입력, 네트워크 데이터)에 사용하면 악성 코드가 실행될 수 있는 심각한 보안 위험이 있습니다.
방법 2: ast.literal_eval() 사용 (권장)
파이썬의 ast(Abstract Syntax Tree) 모듈에는 literal_eval() 메서드가 있습니다. 이 함수는 딕셔너리, 리스트, 튜플, 숫자, 문자열과 같은 유효한 파이썬 리터럴 구조만 안전하게 평가하며, 임의의 코드 실행을 허용하지 않습니다. 따라서 eval()보다 훨씬 안전하며 실무에서 권장되는 방식입니다.
>>> D1 = {'1': 1, '2': 2, '3': 3}
>>> s = str(D1)
>>> import ast
>>> D2 = ast.literal_eval(s)
>>> D2
{'1': 1, '2': 2, '3': 3}참고: json 모듈 활용
딕셔너리가 문자열, 숫자, 불리언 등 JSON과 호환되는 자료형만 포함하고 있다면 json.loads()를 사용하는 것도 좋은 선택입니다. 단, 키와 값이 반드시 큰따옴표(")로 감싸진 표준 JSON 형식이어야 하므로, 파이썬 repr 형식의 문자열에는 ast.literal_eval()이 더 적합합니다.
>>> import json
>>> s = '{"1": 1, "2": 2, "3": 3}'
>>> D2 = json.loads(s)
>>> D2
{'1': 1, '2': 2, '3': 3}
정리하면, 신뢰할 수 있는 코드에서 간단히 변환할 때는 eval(), 외부 입력을 다룰 때는 ast.literal_eval(), JSON 형식 데이터라면 json.loads()를 사용하는 것이 가장 안전하고 효율적입니다.