出于好奇,有可能将以下逻辑写成一个不错的词典理解吗?
a = "a c\nb c\nn q\n".split('\n')[:-1]
output = {}
for line in a:
tmp = line.split(' ')
output[tmp[0]] = tmp[1]
我写了以下内容,但没有临时任务,我必须拆分两次,这是不幸的:
{line.split(' ')[0]:line.split(' ')[1] for line in a}
可能更优雅吗?
答案 0 :(得分:6)
在这种情况下,我认为dict 构造函数更好一点,因为它需要一个可迭代的2个序列:
dict(line.split() for line in a)
演示:
>>> a
['a c', 'b c', 'n q']
>>> dict(line.split() for line in a)
{'a': 'c', 'b': 'c', 'n': 'q'}
答案 1 :(得分:4)
使用嵌套列表推导:
{p[0]:p[1] for p in [l.split(" ") for l in a]}
输出:
{'a': 'c', 'b': 'c', 'n': 'q'}
答案 2 :(得分:2)
高度针对特定输入中的空格:
>>> a = "a c\nb c\nn q\n".split('\n')[:-1]
>>> {line[0]:line[2] for line in a}
{'a': 'c', 'b': 'c', 'n': 'q'}
答案 3 :(得分:0)
是否有效:
>>> a = "a c\nb c\nn q\n".split('\n')[:-1]
>>> {i[0]:i[1] for line in a for i in [line.split(' ')]}
{'a': 'c', 'b': 'c', 'n': 'q'}
答案 4 :(得分:0)
在这种情况下,您可以使用
dict(line.split(' ') for line in a)
但是对于更复杂的“值处理”,我通常会发现使用“正常”循环(就像你做的那样)或编写小辅助函数更容易:
def helper(val):
...
return key, value
dict(helper(line) for line in a)
这是一件事(残缺的lambda /匿名函数语法)我真的讨厌python。
答案 5 :(得分:0)
使用嵌套列表推导而不进行拆分。
>>> {line[0]:line[-1] for line in a}
{'a': 'c', 'b': 'c', 'n': 'q'}
答案 6 :(得分:0)
通过python的re模块,
>>> import re
>>> a = "a c\nb c\nn q\n"
>>> a
'a c\nb c\nn q\n'
>>> m = re.findall(r'^(.) (.)$', a, re.M)
>>> m
[('a', 'c'), ('b', 'c'), ('n', 'q')]
>>> dict(m)
{'a': 'c', 'b': 'c', 'n': 'q'}