字符串转换使用列表理解与dict(convert string to dict using list

2019-07-31 15:46发布

我也碰到这个问题来了几次,似乎无法找出一个简单的解决方案。 说我有一个字符串

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

我想将其转换成具有,b和c是所述键和0,1和3被它们各自的值(转换为int)的字典。 很显然,我可以这样做:

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转换为对飞一个int,做这样的事情是语法不正确。

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

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

Answer 1:

你的意思呢?

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


Answer 2:

如何不列表中理解一个班轮?

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


Answer 3:

尝试下:

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


Answer 4:

我有时像这种方法,特别是当用于制造键和值的逻辑是更复杂的:

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

def get_key_val(x):
    a,b = x.split('=')
    return a,int(b)

ans = dict(map(get_key_val,s.split()))


Answer 5:

现在你应该使用字典理解,在2.7介绍:

mydict = {key: int(value) for key, value in (a.split('=') for a in mystring.split())}

这本字典的理解是更快,更亮泽(和,在我看来,更具可读性)。

from timeit import timeit

setup = """mystring = "a=0 b=1 c=3\""""
code1 = """mydict = dict((n,int(v)) for n,v in (a.split('=') for a in mystring.split()))""" # S.Lott's code
code2 = """mydict = {key: int(value) for key, value in (a.split('=') for a in mystring.split())}"""

print timeit(code1, setup=setup, number=10000) # 0.115524053574
print timeit(code2, setup=setup, number=10000) # 0.105328798294


Answer 6:

from cgi import parse_qsl
text = "a=0 b=1 c=3"
dic = dict((k, int(v)) for k, v in parse_qsl(text.replace(' ', '&')))
print dic

版画

{'a': 0, 'c': 3, 'b': 1}


Answer 7:

我这样做:

def kv(e): return (e[0], int(e[1]))
d = dict([kv(e.split("=")) for e in string.split(" ")])


Answer 8:

我喜欢美国洛特的解决方案,但我想出了另一种可能性。
既然你已经有一个字符串类似不知为何,你会写的方式,你可以使其适应Python语法,然后的eval()吧:)

import re
string = "a=0 b=1 c=3"
string2 = "{"+ re.sub('( |^)(?P<id>\w+)=(?P<val>\d+)', ' "\g<id>":\g<val>,', string) +"}"
dict = eval(string2)
print type(string), type(string2), type(dict)
print string, string2, dict

这里的正则表达式是相当原始,不会捕获所有可能的Python标识符,但我想保持简单为了简单起见。 当然,如果你有过怎样产生的输入字符串控制,根据Python语法只是生成它和eval它拿走。 当然,你应该进行额外的完整性检查,以确保没有任何代码注入那里!



文章来源: convert string to dict using list comprehension