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ÅŸ:
Bir kodlama kullanmadan bayt dizisi iç...
Nasıl Onaltılık Dize ve Başkan versa i...
Dönüştürme bir nesne bir dize için...
Java tarih için dize dönüştürme...
Neden bir dize ile gidiş-dönüş dönüştü...