Создание словаря из переданной строки - PullRequest
0 голосов
/ 26 августа 2011

У меня есть переменная foo = "'totalteams': 10, 'totalrounds': 11"

Почему я не могу это сделать?

data=dict(foo)

так что я могу сделать

print data['totalteams']

Мне нужно использовать Python 2.5 из-за Google. Как мне делать то, что я хочу?

спасибо

Ответы [ 4 ]

1 голос
/ 26 августа 2011

Потому что строка не словарь. У вас есть несколько вариантов:

Сделать словарь буквальным:

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 должно быть последним средством.

1 голос
/ 26 августа 2011
foo = "'totalteams': 10, 'totalrounds': 11"
data = eval("{%s}" % foo)
print data['totalteams']
0 голосов
/ 26 августа 2011

Возможно, он не такой надежный, но совместим с 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/ :: никогда не знал, что вы можете распаковать список:)

0 голосов
/ 26 августа 2011

вы хотите использовать 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}
>>> 
...