如何创建具有公共键的字典

How to create a dictionary which will have common keys

我正在尝试使用 keysValues[=14= 创建 Dictionary ]

keys = [1,2,3,4,5,1,1,2,2,3,4,4,5,6,7,7,8,9]

和价值观。

values = ['a', 'b' , 'c' ,'d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

使用 zip 函数或使用 for 循环。

dict1 = dict(zip(keys, values))
print(dict1)

输出是。

{1: 'g', 2: 'i', 3: 'j', 4: 'l', 5: 'm', 6: 'n', 7: 'p', 8: 'q', 9: 'r'}

但是字典忽略了公共键的值。喜欢它忽略 1: 'a' 等等。

请告诉我一个处理方法

字典不能有多个相同的键。 但是你可以有多个相同的值。

例如:

a = {
    1: "a",
    1: "b"
}
print(a)  # {1: 'b'}
b = {
    "a": 1,
    "b": 1
}
print(b)  # {'a': 1, 'b': 1}

为什么

键必须是唯一的,因为您使用 my_dict[key] 访问值。如果my_dict[key]给多个值,你选哪个?

备选

您可以在列表中存储一个键的多个值:

keys = [1,2,3,4,5,1,1,2,2,3,4,4,5,6,7,7,8,9]
values = ['a', 'b' , 'c' ,'d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

dict1 = dict()
for key, value in zip(keys, values):
    if key in dict1:
        dict1[key].append(value)
    else:
        dict1[key] = [value]

print(dict1)
# {1: ['a', 'f', 'g'], 2: ['b', 'h', 'i'], 3: ['c', 'j'], 4: ['d', 'k', 'l'], 5: ['e']}

与collections.defaultdict

from collections import defaultdict

keys = [1,2,3,4,5,1,1,2,2,3,4,4,5,6,7,7,8,9]
values = ['a', 'b' , 'c' ,'d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

dict1 = defaultdict(list)
for key, value in zip(keys, values):
    dict1[key].append(value)

print(dict(dict1))
# {1: ['a', 'f', 'g'], 2: ['b', 'h', 'i'], 3: ['c', 'j'], 4: ['d', 'k', 'l'], 5: ['e']}

理想情况下,这应该是对 Dorian 上面的回答的评论。但是,我没有足够的声誉点来发表评论。只是想补充一点,我更喜欢使用 defaultdict() 而不是 dict() 来避免必须检查密钥是否已被使用的步骤。

from collections import defaultdict 

keys = [1,2,3,4,5,1,1,2,2,3,4,4,5,6,7,7,8,9]
values = ['a', 'b' , 'c' ,'d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']

dict1 = defaultdict(lambda:[])
for key, value in zip(keys, values):
    dict1[key].append(value)
    
print(dict1)
# {1: ['a', 'f', 'g'], 2: ['b', 'h', 'i'], 3: ['c', 'j'], 4: ['d', 'k', 'l'], 5: ['e']}

如果您想了解更多有关 defaultdict() 用法的信息,这里有一个很好的参考 https://www.accelebrate.com/blog/using-defaultdict-python