如何将元组集合转换为字典?

3

我有一个迭代器,可以产生N个元组,但这里我假装只有3个。它们的长度都是偶数。

t1 = (a1, b1, c1)
t2 = (a2, b2, c2)
t3 = (a3, b3, c3)

我希望将上述内容转换为以下内容:
d = {a1: [a2, a3], 
      b1: [b2, b3],
      c1: [c2, c3]}

我明白我应该遍历元组并将它们以某种方式压缩成字典,但我基本上卡住了。
2个回答

5
假设您的列表的第一个元素不同,您可以使用列表推导式生成结果字典。
请注意,字典中的所有键都是唯一的。因此,如果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
使用列表(字典)推导式的绝佳示例! - MrGumble
但这不是海报所问的。 - Pablo Antonio
假设是正确的。列表中的第一个元素是不同的。这对我所需的工作很好。谢谢。 - dizzystar

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']}


2
要填充 d,您可以执行以下操作:d = collections.defaultdict(list) - Ozgur Vatansever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接