我有一个字符串形式:
s = 'A - 13, B - 14, C - 29, M - 99'
等等(长度不一样)。从中创建字典的最简单方法是什么?
A: 13, B: 14, C: 29 ...
我知道我可以拆分,但我无法获得正确的语法来解决这个问题。如果我分成-
,那么我该如何加入这两个部分?
对此进行迭代似乎非常痛苦。
答案 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'}