使用列表推导将字符串转换为字典

15 投票
8 回答
20283 浏览
提问于 2025-04-15 13:27

我遇到过这个问题好几次,但总是找不到简单的解决办法。假设我有一个字符串:

string = "a=0 b=1 c=3"

我想把它转换成一个字典,其中 a、b 和 c 是键,而 0、1 和 3 是它们对应的值(需要转换成整数)。显然,我可以这样做:

list = string.split()
dic = {}
for entry in list:
    key, val = entry.split('=')
    dic[key] = int(val)

不过,我不太喜欢那个 for 循环,感觉这么简单的事情应该能用某种列表推导式来完成。而且在一些稍微简单的情况下,如果 val 是字符串,这样做是可以的。

dic = dict([entry.split('=') for entry in list])

但是,我需要在运行时把 val 转换成整数,像这样做就不符合语法规则。

dic = dict([[entry[0], int(entry[1])] for entry.split('=') in list])

所以我的问题是:有没有办法用列表推导式来去掉 for 循环?如果没有,Python 有没有什么内置的方法可以帮我做到这一点?

8 个回答

3

试试下面这个:

dict([x.split('=') for x in s.split()])
3

有没有一种不使用列表推导的单行代码呢?

 foo="a=0 b=1 c=3"
 ans=eval( 'dict(%s)'%foo.replace(' ',',')) )
 print ans
{'a': 0, 'c': 3, 'b': 1}
29

你是指这个吗?

>>> dict( (n,int(v)) for n,v in (a.split('=') for a in string.split() ) )
{'a': 0, 'c': 3, 'b': 1}

撰写回答