从字符串创建字典

时间:2011-01-07 16:49:12

标签: python string dictionary

我有一个字符串形式:

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

等等(长度不一样)。从中创建字典的最简单方法是什么?

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

我知道我可以拆分,但我无法获得正确的语法来解决这个问题。如果我分成-,那么我该如何加入这两个部分?

对此进行迭代似乎非常痛苦。

8 个答案:

答案 0 :(得分:23)

要解决您的示例,您可以执行以下操作:

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

它有三件事:

  • 将字符串拆分为"<key> - <value>"部分:s.split(',')
  • 将每个部分拆分为"<key> ", " <value>"对:item.split('-')
  • 从每对中删除空格:(k.strip(), v.strip())

答案 1 :(得分:14)

>>> 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}

答案 2 :(得分:4)

>>> 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}

答案 3 :(得分:2)

dict((p.split(' - ') for p in s.split(',')))

答案 4 :(得分:2)

来到这里遇到以下问题的人:

将字符串public componentDidMount(): void { setTimeout(this.whenCDM(this.countriesList), 1); } 转换为字典对象。

您可以简单地使用// ...code it("whenCDM", () => { const getCountriesListRef = () => { return { current: { getBoundingClientRect: () => { return { bottom: 624, height: 54, left: 15, right: 360, top: 570, width: 345, x: 15, y: 570 }; } } }; }; const instance = wrapper.instance(); expect(instance.whenCDM(getCountriesListRef())); }); // ...code 从字符串对象中获取a = '{"a":1,"b":2}'作为字典的对象。

答案 5 :(得分:1)

这是一个不使用生成器表达式并使用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}

答案 6 :(得分:0)

这应该有效:

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(',')))

答案 7 :(得分:0)

试试正则表达式findall。忽略空格,A-Z 单个空格然后是文字 - 然后是单个空格,然后是数字

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

result=re.findall('\s*([A-Z\s+\-0-9]+)',s)
dict={}
for item in result:
   key,value =item.split(' - ')
   dict[key]=value

print(dict)

输出:

{'A': '13', 'B': '14', 'C': '29', 'M': '99'}