使用list comprehension将字符串转换为dict

Pav*_*vel 15 python string dictionary list-comprehension generator-expression

我几次遇到这个问题,似乎无法找到一个简单的解决方案.说我有一个字符串

string = "a=0 b=1 c=3"
Run Code Online (Sandbox Code Playgroud)

我想将其转换为字典,其中a,b和c是键,0,1和3是它们各自的值(转换为int).显然我可以这样做:

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

但我真的不喜欢循环,看起来很简单,你应该能够将它转换为某种列表理解表达式.这适用于稍微简单的情况,其中val可以是一个字符串.

dic = dict([entry.split('=') for entry in list])
Run Code Online (Sandbox Code Playgroud)

但是,我需要动态地将val转换为int,并且做这样的事情在语法上是不正确的.

dic = dict([[entry[0], int(entry[1])] for entry.split('=') in list])
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有没有办法消除使用列表理解的for循环?如果没有,是否有一些内置的python方法可以为我做到这一点?

S.L*_*ott 29

你是说这个吗?

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

  • 虽然这很酷,但我认为从长期代码维护的角度来看,我更喜欢原始问题中的版本.原始问题中的代码清晰明了,上面需要几十秒才能完成. (4认同)