使用列表推导将字符串转换为字典
我遇到过这个问题好几次,但总是找不到简单的解决办法。假设我有一个字符串:
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}