如何创建具有公共键的字典
How to create a dictionary which will have common keys
我正在尝试使用 keys 和 Values[=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
我正在尝试使用 keys 和 Values[=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