在Python中使用列表推导创建字典时获取重复值

时间:2017-03-22 12:09:10

标签: python python-2.7 dictionary duplicates

我有两个列表如下:

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}

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