我正在尝试通过嵌套的list
创建dict
groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]
L = [{y:x[0] for y in x if y != x[0]} for x in groups]
d = { k: v for d in L for k, v in d.items()}
print (d)
{'B': 'Group1', 'C': 'Group2', 'D': 'Group2', 'A': 'Group1'}
但这看起来有点复杂。
有没有更好的解决方案?
发布于 2017-04-05 17:39:08
我认为一行解决方案有点混乱。我会写如下代码
groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]
result = {}
for group in groups:
for item in group[1:]:
result[item] = group[0]
print result
发布于 2017-04-05 18:13:39
这基本上是Willem的一个更漂亮的版本:
>>> groups = [['Group1', 'A', 'B'], ['Group2', 'C', 'D']]
>>> {k:g for g,*tail in groups for k in tail}
{'B': 'Group1', 'A': 'Group1', 'C': 'Group2', 'D': 'Group2'}
但它不能与空列表一起工作:groups = [[],['A','B']]
>>> {k:head for head, *tail in grps for k in tail}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <dictcomp>
ValueError: not enough values to unpack (expected at least 1, got 0)
发布于 2017-04-11 05:11:04
我也喜欢Willem的解决方案,但只是为了完整...
另一个使用itertools和生成器函数的变体(仅限Python 3.x )
def pairs(groups):
for value,*keys in groups:
for key_value in zip(keys, itertools.repeat(value)):
yield key_value
dict(pairs(groups))
{'A': 'Group1', 'B': 'Group1', 'C': 'Group2', 'D': 'Group2'}
https://stackoverflow.com/questions/43227103
复制相似问题