我有两个列表如下:
list1 = [0, 0, 1]
list2 = [0, 1, 2]
我用它们拉链:
zipped_list = zip(list1,list2)
结果是zipped_list = [(0, 0), (0, 1), (1, 2)]
现在,我想使用列表推导创建一个字典,如下所示:
d = {k:v for k, v in zipped_list}
结果为d={0: 1, 1: 2}
对于key = 0
中的zipped_list
,字典仅包含最后一次出现的键值对。
问题是:我怎样才能获得重复键的所有键值对,而不仅仅是最后一个键?
在特定的例子中,我想得到
d={0: 0, 0: 1, 1: 2}
答案 0 :(得分:1)
这是不可能的,因为您不能使用重复键。
您可以尝试在同一个键下使用list
所有值。
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> zipped_list = [(0, 0), (0, 1), (1, 2)]
>>> for k,v in zipped_list:
... d[k].append(v)
...
>>> d
defaultdict(<type 'list'>, {0: [0, 1], 1: [2]})
答案 1 :(得分:1)
基本上相同的方法@Ashish正在使用但没有任何外部模块(导入)
list1 = [0, 0, 1]
list2 = [0, 1, 2]
zipped = zip(list1, list2)
d = {}
for items in zipped:
res = d.setdefault(items[0], [])
res.append(items[1])
print(d) # prints: {0: [0, 1], 1: [2]}
是的,如果你的意思是键,这可以通过任何其他可混合数据结构来实现。例如list1
可能是list1 = ['a', 'a', 'b']
。
如果您发现setdefault
幻想,请查看其documentation。