我是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}
谢谢
答案 0 :(得分:2)
Python dict
无法实现您的要求,因为这与dict的定义背道而驰-密钥必须唯一。这些评论解释了为什么会这样。
但是,还有多种可能对您有用的其他方法可以达到几乎相同的效果。一种简单但不是非常有用的方法是:
almost_dictionary = list(zip(list1, list2))
这给出结果
[(1, 2), (2, 3), (3, 4), (4, 5), (1, 6)]
有时可以像字典一样使用。但是,这可能不是您想要的。最好是一个dict
或defaultdict
,对于每个键,保留与该键关联的所有值的list
。 defaultdict
更易于使用,但难以设置:
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]
,因此您需要同时使用这两个值。
选择哪种方法取决于字典的用途。