Создание словаря из строки - PullRequest
10 голосов
/ 07 января 2011

У меня есть строка в виде:

s = 'A - 13, B - 14, C - 29, M - 99'

и т. Д. (Длина варьируется).Какой самый простой способ создать словарь из этого?

A: 13, B: 14, C: 29 ...

Я знаю, что могу разделить, но не могу получить правильный синтаксис, как это сделать.Если я разделю на -, то как мне соединить две части?

Итерации по этому, кажется, большая боль.

Ответы [ 7 ]

23 голосов
/ 07 января 2011

Чтобы решить свой пример, вы можете сделать это:

mydict = dict((k.strip(), v.strip()) for k,v in 
              (item.split('-') for item in s.split(',')))

Он делает 3 вещи:

  • разбить строку на "<key> - <value>" частей: s.split(',')
  • разбить каждую часть на "<key> ", " <value>" пары: item.split('-')
  • удалить пробел из каждой пары: (k.strip(), v.strip())
14 голосов
/ 07 января 2011
>>> s = 'A - 13, B - 14, C - 29, M - 99'
>>> dict(e.split(' - ') for e in s.split(','))
{'A': '13', 'C': '29', 'B': '14', 'M': '99'}

РЕДАКТИРОВАТЬ: Следующее решение для случаев, когда вы хотите значения в виде целых чисел, что я думаю, что вы хотите.

>>> dict((k, int(v)) for k, v in (e.split(' - ') for e in s.split(',')))
{'A': 13, ' B': 14, ' M': 99, ' C': 29}
4 голосов
/ 17 октября 2018

Те, кто пришел сюда со следующей проблемой:

преобразовать строку a = '{"a":1,"b":2}' в объект словаря.

Вы можете просто использовать a = eval(a), чтобы получить a как объект словаря изстроковый объект.

4 голосов
/ 07 января 2011
>>> dict((k.strip(),int(v.strip())) for k,v in (p.split('-') for p in s.split(',')))
{'A': 13, 'B': 14, 'M': 99, 'C': 29}
2 голосов
/ 07 января 2011
dict((p.split(' - ') for p in s.split(',')))
1 голос
/ 07 января 2011

Вот ответ, который не использует выражения генератора и использует replace вместо strip.

>>> s = 'A - 13, B - 14, C - 29, M - 99'
>>> d = {}
>>> for pair in s.replace(' ','').split(','):
...     k, v = pair.split('-')
...     d[k] = int(v)
...
>>> d
{'A': 13, 'C': 29, 'B': 14, 'M': 99}
0 голосов
/ 07 января 2011

Это должно работать:

dict(map(lambda l:map(lambda j:j.strip(),l), map(lambda i: i.split('-'), s.split(','))))

Если вы не хотите раздеваться, просто сделайте:

dict(map(lambda i: i.split('-'), s.split(',')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...