Преобразование значения словаря в список? - PullRequest
1 голос
/ 07 февраля 2012
'state_license': {u'License ': u'29393, 25633', 
                  u'Expiration': u'08-01-2012, 04-02-2012', 
                  u'Trade': u'Registered Contractor, Plumber'}

Как я могу преобразовать '29393, 25633' в список?

Ответы [ 6 ]

4 голосов
/ 07 февраля 2012
>>> state_license = {u'License ': u'29393, 25633',
...                  u'Expiration': u'08-01-2012, 04-02-2012',
...                  u'Trade': u'Registered Contractor, Plumber'}
>>> {key: value.split(", ") for key, value in state_license.items()}
{u'License ': [u'29393', u'25633'], 
 u'Expiration': [u'08-01-2012', u'04-02-2012'], 
 u'Trade': [u'Registered Contractor', u'Plumber']}
3 голосов
/ 07 февраля 2012

С split():

>>> '29393, 25633'.split(', ')
['29393', '25633']

Непонятно, но у вас словарь с двойным вложением, что-то вроде:

d = {'state_license': {'License ': '29393, 25633', 
                       'Expiration': '08-01-2012, 04-02-2012', 
                       'Trade': 'Registered Contractor, Plumber'}}

Для преобразования:

nested = d['state_license']
for k,v in nested.iteritems():
    nested[k] = v.split(', ')

"""
{'state_license': {'License ': ['29393', '25633'], 
                    'Expiration': ['08-01-2012', '04-02-2012'], 
                    'Trade': ['Registered Contractor', 'Plumber']}}
"""
0 голосов
/ 07 февраля 2012

Если я не ошибаюсь, eval () преобразует код для генерации байтового кода Python, а затем выполняет его на виртуальной машине Python, которая намного медленнее обычной функции str.split:

help(str.split)

на самом деле, я бы разделил с ',' вместо ',' и затем лишил бы каждый элемент, например. (Python3.x толкование словаря):

{k: [x.strip() for x in v.split(',')] for k, v in dictionary['state_license'].items()}
0 голосов
/ 07 февраля 2012

Если словарь с ключом 'state_license' называется d:

[d.__setitem__(k,v.split(", ")) for k,v in d['state_license'].items()]
0 голосов
/ 07 февраля 2012

Теперь. Если вы хотите быть смелым дьяволом (не!), Вы можете сделать это:

>>> eval('[' + u'29393, 25633' + ']')
[29393, 25633]

Но ... это зависит от того, знаете ли вы, что находится в этом списке. Это также сломается для других элементов:

>>> eval('[' + u'08-01-2012, 04-02-2012' + ']')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    [08-01-2012, 04-02-2012]
     ^
SyntaxError: invalid token

Итак, придерживайтесь метода str.split();)

0 голосов
/ 07 февраля 2012

Вы можете использовать метод split для этого:

>>> u'29393, 25633'.split()
[u'29393,', u'25633']

Если у вас есть больший словарь в info и вы хотите преобразовать значение на месте, тогда выполните

info['state_license']['License'] = info['state_license']['License'].split()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...