从传入的字符串创建字典

时间:2011-08-26 18:19:06

标签: python dictionary variable-assignment

我有一个变量foo = "'totalteams': 10, 'totalrounds': 11"

为什么我不能这样做?

data=dict(foo)

所以我可以做到

print data['totalteams']

我需要使用python 2.5,因为谷歌。我该怎么做我想要的?

感谢

4 个答案:

答案 0 :(得分:1)

foo = "'totalteams': 10, 'totalrounds': 11"
data = eval("{%s}" % foo)
print data['totalteams']

答案 1 :(得分:1)

因为字符串不是字典。你有几个选择:

制作字典文字:

data = {'totalteams': 10, 'totalrounds': 11}
print data['totalteams']

如果必须使用字符串,请使用JSON字符串或类似的数据:

# as F.J pointed out, json isn't a built-in in python 2.5 so you'll have to get simplejson or some other json library
import json
foo = '{"totalteams": 10, "totalrounds": 11}'
data = json.loads(foo)
print data['totalteams']

# or
foo = '"totalteams": 10, "totalrounds": 11'
data = json.loads('{%s}' % foo)

或者使用eval之类的dminer答案,但eval应该是最后的选择。

答案 2 :(得分:0)

您想使用ast.literal_eval。例如:

>>> foo = "'totalteams': 10, 'totalrounds': 11"
>>> import ast
>>> ast.literal_eval("{%s}" % foo)
{'totalteams': 10, 'totalrounds': 11}
>>> 

Edit:嗯..在上?您可能需要考虑使用在该环境中更容易解析的格式。 PyYAML是标准的,您可以考虑使用该格式:

>>> import yaml
>>> yaml.load("""
... totalteams: 10
... totalrounds: 11
... """)
{'totalteams': 10, 'totalrounds': 11}
>>> 

答案 3 :(得分:0)

它可能不那么强大,但它兼容2.5:

import re
foo = "'totalteams':10,'totalrounds':11"
m = re.compile("'(\w+)':(\d+)")
t = m.findall(foo)

然后,您将获得一个元组列表,您可以将其分解并压缩到字典中

>>> a,b = zip(*t)
>>> a
('totalteams', 'totalrounds')
>>> b
('10', '11')
>>> d = dict(zip(list(a),list(b)))
>>> d
{'totalteams': '10', 'totalrounds': '11'}
>>> 

归功于http://selinap.com/2009/02/unzip-a-python-list/ ::永远不知道你可以解压缩列表:)