Mic*_*eyn 3 python python-3.x python-3.6
这是一个具体的例子:
my_dict={k:int(encoded_value)
for (k,encoded_value) in
[encoded_key_value.split('=') for encoded_key_value in
many_encoded_key_values.split(',')]}
Run Code Online (Sandbox Code Playgroud)
问题是关于内部列表[],是否可以避免,例如:
# This will not parse
my_dict={k:int(encoded_value)
for (k,encoded_value) in
encoded_key_value.split('=') for encoded_key_value in
many_encoded_key_values.split(',')}
Run Code Online (Sandbox Code Playgroud)
...,这是无效的语法:
NameError: name 'encoded_key_value' is not defined
样本数据: aa=1,bb=2,cc=3,dd=4,ee=-5
如前所述,生成器表达式将增强您的方法,避免创建内部列表.但是使用re.findall()函数有一个更短的方法来获得所需的结果:
result = {k:int(v) for k,v in re.findall(r'(\w+)=([^,]+)', many_encoded_key_values)}
print(result)
Run Code Online (Sandbox Code Playgroud)
输出:
{'dd': 4, 'aa': 1, 'bb': 2, 'ee': -5, 'cc': 3}
Run Code Online (Sandbox Code Playgroud)
替代方法是使用re.finditer()返回'callable_iterator'实例的函数:
result = {m.group(1):int(m.group(2)) for m in re.finditer(r'(\w+)=([^,]+)', many_encoded_key_values)}
Run Code Online (Sandbox Code Playgroud)