我有一个生成N元组的迭代器,但在这里我假装我有3个。它们的长度都很均匀。
t1 = (a1, b1, c1)
t2 = (a2, b2, c2)
t3 = (a3, b3, c3)
我希望将上述内容转换为:
d = {a1: [a2, a3],
b1: [b2, b3],
c1: [c2, c3]}
我知道我应该迭代元组并以某种方式将它们压缩成字典,但我几乎卡住了。
答案 0 :(得分:5)
假设列表中的第一个元素不同,您可以使用列表推导来生成结果字典。
请注意,dict
中的所有密钥都是唯一。因此,如果a1
等于a2
,t1
将被t2
覆盖。
>>> lists = [['a1', 'b1', 'c1'], ['a2', 'b2', 'c2'], ['a3', 'b3', 'c3']]
>>> d = {list[0]:list[1:] for list in zip(*lists)}
>>> print d
>>> {'a1': ('a2', 'a3'), 'b1': ('b2', 'b3'), 'c1': ('c2', 'c3')}
答案 1 :(得分:2)
这是实现目标的方法:
ls = [['a1', 'b1', 'c1'], ['a2', 'b2', 'c2'], ['a3', 'b3', 'c3']]
# I create an iterator since that what you have in your problem
it = iter(ls)
keys = it.next()
d = {k: [] for k in keys}
for l in it:
for i, e in enumerate(l):
d[keys[i]].append(e)
生成的字典为{'a1': ['a2', 'a3'], 'c1': ['c2', 'c3'], 'b1': ['b2', 'b3']}
。