在Python中创建字典时如何处理重复值?

时间:2018-08-02 20:05:27

标签: python list dictionary debugging duplicates

我是python的初学者,我想创建一个简单的程序,使用zip函数将list1中的每个元素分配给list2中的相应元素。

list1=[1,2,3,4,1]
list2=[2,3,4,5,6]
dictionary=dict(zip(list1,list2))
print(dictionary)

但是,由于list1中有一个重复的值,因此字典显示以下结果:

{1: 6, 2: 3, 3: 4, 4: 5}

由于1是list1中的重复值,因此仅显示1:6,而不显示1:2。如何更改代码,以便将重复值考虑在内并按其各自顺序显示?

{1: 2, 2: 3, 3: 4, 4: 5, 1: 6}

谢谢

1 个答案:

答案 0 :(得分:2)

Python dict无法实现您的要求,因为这与dict的定义背道而驰-密钥必须唯一。这些评论解释了为什么会这样。

但是,还有多种可能对您有用的其他方法可以达到几乎相同的效果。一种简单但不是非常有用的方法是:

almost_dictionary = list(zip(list1, list2))

这给出结果

[(1, 2), (2, 3), (3, 4), (4, 5), (1, 6)]

有时可以像字典一样使用。但是,这可能不是您想要的。最好是一个dictdefaultdict,对于每个键,保留与该键关联的所有值的listdefaultdict更易于使用,但难以设置:

dictionary = defaultdict(list)
for k, v in zip(list1, list2):
    dictionary[k].append(v)
print(dictionary)

这给出结果

defaultdict(<class 'list'>, {1: [2, 6], 2: [3], 3: [4], 4: [5]})

,您会看到每个键都有每个值-值仅在列表中。 dictionary[1]的值为[2, 6],因此您需要同时使用这两个值。

选择哪种方法取决于字典的用途。