Python-有没有一种方法可以将多个值附加到一个键上?

时间:2020-06-14 19:58:04

标签: python dictionary key-value

我有一个数字列表和每个数字的值。我想做的是检查字典中是否已经存在该数字,如果存在,请将该值附加到特定键的值列表中。

例如

0  
a   

2
b

3
c

0
d

7
e

我想要实现的是在字典中填充数字,数字是键,字母是值。但是,如果再次出现数字0,我想取第二个0的值并追加到我的值列表中。

基本上结果将是

 "0" : [a,d]
 "2" : [b]
 "3" : [c]
 "7" : [e]

目前正在执行以下操作:

num_letter_dict = {}
num = ['0', '2', '3', '0','7']
letters = ['a', 'b', 'c', 'd','e']

for line in num:
    if line in num_letter_dict:
        num_letter_dict[line].append(letters)
    else:
        num_letter_dict[line] = [letters]

    print(num_letter_dict)

这是我得到的结果

{'0': [['a', 'b', 'c', 'd', 'e']]}
{'0': [['a', 'b', 'c', 'd', 'e']], '2': [['a', 'b', 'c', 'd', 'e']]}
{'0': [['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']], '2': [['a', 'b', 'c', 'd', 'e']]}
{'0': [['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']], '2': [['a', 'b', 'c', 'd', 'e']], '3': [['a', 'b', 'c', 'd', 'e']]}
{'0': [['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']], '2': [['a', 'b', 'c', 'd', 'e']], '3': [['a', 'b', 'c', 'd', 'e']], '7': [['a', 'b', 'c', 'd', 'e']]}

5 个答案:

答案 0 :(得分:0)

您要附加letters,它本身就是完整列表。相反,您想在letter中附加与您在num列表中查看的键的索引相对应的元素。

for idx, line in enumerate(num):
    if line in num_letter_dict:
        num_letter_dict[line].append(letters[idx]) # append the element
    else:
        num_letter_dict[line] = [letters[idx]]

结果:

>>> print(num_letter_dict)
{'0': ['a', 'c'], '2': ['b'], '3': ['d'], '7': ['e']}

答案 1 :(得分:0)

您只需要将单个字母添加到字典内的相关列表中,而不是整个字母列表。 zip函数将遍历两个输入列表中的相应值,如下所示:

num_letter_dict = {}
num = ['0', '2', '3', '0','7']
letters = ['a', 'b', 'c', 'd','e']

for n, letter in zip(num, letters):
    if n not in num_letter_dict:
        num_letter_dict[n] = []
    num_letter_dict[n].append(letter)
print(num_letter_dict)

礼物:

{'0': ['a', 'c'], '3': ['d'], '7': ['e'], '2': ['b']}

答案 2 :(得分:0)

我认为这可以为您提供帮助。

num_letter_dict = {}
num = ['0', '2', '0', '3','7']
letters = ['a', 'b', 'c', 'd','e']

for value, line in zip(letters,num):
    if line in num_letter_dict:
        num_letter_dict[line].append(value) # append the element
    else:
        num_letter_dict[line] = [value]

答案 3 :(得分:0)

尝试以下代码,我修改了for循环并使用了extend

for i, letter in zip(num, letters):
    if i not in num_letter_dict:
        num_letter_dict[i] = []
    num_letter_dict[i].extend(letter) #change over here
print(num_letter_dict)

答案 4 :(得分:0)

啊,昨天我不得不处理同样的问题。虽然其他提交的答案会起作用,但我可以推荐defaultdict from the Collections module吗?

from collections import defaultdict

num = ['0', '2', '3', '0','7']
letters = ['a', 'b', 'c', 'd','e']

num_letter_dict = defaultdict(list)
for n, letter in zip(num, letters):
    num_letter_dict[n].append(letter)

print(num_letter_dict)

我喜欢这种方法,因为它允许defaultdict类在内部进行列表的构建,而不是使用if语句混淆自己的源代码。

您可以在IDEOne上测试执行此解决方案:https://ideone.com/9Dg9Rk