我有一个变量foo = "'totalteams': 10, 'totalrounds': 11"
为什么我不能这样做?
data=dict(foo)
所以我可以做到
print data['totalteams']
我需要使用python 2.5,因为谷歌。我该怎么做我想要的?
感谢
答案 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:
嗯..在google-app-engine上?您可能需要考虑使用在该环境中更容易解析的格式。 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/ ::永远不知道你可以解压缩列表:)