SORU
12 HAZİRAN 2009, Cuma


Dönüştürme Sözlük için bir Dize?

Nasıl bir str gösterimine dönüştürmek dict bir dizeye aşağıdaki gibi dict, alabilir miyim?

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

eval kullanmamayı tercih ederim. Başka ne kullanabilirim?

Bunun ana nedeni, yazdığı arkadaşları derslerimden biri, dizeler içine her giriş dönüştürür. Gidip derslerini değiştirmek için ruh hali içinde, bu konu ile ilgili değilim.

CEVAP
12 HAZİRAN 2009, Cuma


Python 2.6 başlayarak yerleşik ast.literal_eval: kullanabilirsiniz

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

Bu eval kullanmaktan daha güvenlidir. Kendi docs dediği gibi:

>>> 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.

Örneğin:

>>> 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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ElChakotay Andrich

    ElChakotay A

    10 EKİM 2013
  • Jabari Johnson

    Jabari Johns

    18 Ocak 2008
  • StalkerJS

    StalkerJS

    15 HAZİRAN 2010