프로그래밍 언어/Python

딕셔너리의 문자열 표현을 딕셔너리으로 변환하는 방법

Rateye 2021. 9. 29. 10:29
728x90
반응형
질문 : 사전의 문자열 표현을 사전으로 변환 하시겠습니까?

어떻게 변환 할 수 str (A)의 표현을 dict 로, 예를 들면 다음과 같은 문자열로 dict ?

s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"

eval 을 사용하지 않는 것을 선호합니다. 그 밖에 무엇을 사용할 수 있습니까?

그 주된 이유는 그가 작성한 동료 클래스 중 하나가 모든 입력을 문자열로 변환하기 때문입니다. 이 문제를 다루기 위해 그의 수업을 수정하고 싶지는 않습니다.

답변

ast.literal_eval 사용할 수 있습니다.

>>> import ast
>>> ast.literal_eval("{'muffin' : 'lolz', 'foo' : 'kitty'}")
{'muffin': 'lolz', 'foo': 'kitty'}

eval 사용하는 것보다 안전합니다. 자체 문서에 따르면 다음과 같습니다.

>>> help(ast.literal_eval)
Help on function literal_eval in module ast:

literal_eval(node_or_string)
    Safely evaluate an expression node or a string containing a Python
    expression.  The string or node provided may only consist of the following
    Python literal structures: strings, numbers, tuples, lists, dicts, booleans,
    and None.

예를 들면 :

>>> eval("shutil.rmtree('mongo')")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
  File "/opt/Python-2.6.1/lib/python2.6/shutil.py", line 208, in rmtree
    onerror(os.listdir, path, sys.exc_info())
  File "/opt/Python-2.6.1/lib/python2.6/shutil.py", line 206, in rmtree
    names = os.listdir(path)
OSError: [Errno 2] No such file or directory: 'mongo'
>>> ast.literal_eval("shutil.rmtree('mongo')")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 68, in literal_eval
    return _convert(node_or_string)
  File "/opt/Python-2.6.1/lib/python2.6/ast.py", line 67, in _convert
    raise ValueError('malformed string')
ValueError: malformed string
출처 : https://stackoverflow.com/questions/988228/convert-a-string-representation-of-a-dictionary-to-a-dictionary
728x90
반응형