python-3.x 通过存储具有重复键的多个值,从2个列表创建字典

0wi1tuuw  于 2023-03-13  发布在  Python
关注(0)|答案(3)|浏览(107)

这里有两个列表,我试图做的是找到第一个列表元素的出现,并将保存第二个列表中的值,用于第一个列表中的键,最后,它将成为字典,保存列表1中的特定键和列表2中的值
输入:

list1 = ['A', 'A', 'B', 'B', 'C', 'D']
list2 = [1, 2, 3, 4, 5, 6]

预期输出:

{'A': [1, 2], 'B': [3, 4], 'C': [5], 'D':[6]}

电流输出:

{'A': [1, 2], 'B': [4], 'C': []}

我目前所做的,

values = [list2[0]]
key = list1[0]
dic = {}
for i in range(1, len(list1)):
    if list1[i] == list1[i - 1]:
        values.append(list2[i])
    elif list1[i] != list1[i - 1]:
        dic.update({key: values})
        values = []
        key = list1[i]
print(dic)

列表1和列表2的长度总是相等的,并且是经过排序的

0pizxfdo

0pizxfdo1#

您可以使用dict.setdefault来初始化每个不同的键,并将值附加到一个新的列表中:

output = {}
for key, value in zip(list1, list2):
    output.setdefault(key, []).append(value)

output将变为:

{'A': [1, 2], 'B': [3, 4], 'C': [5], 'D': [6]}

演示:https://replit.com/@blhsing/InstructiveNoxiousCollaborativesoftware

biswetbf

biswetbf2#

您的代码存在多个小问题:
1.您缺少dict中的最后一个条目,因为dict仅在值更改时更新。但是,对于最后一个值(在您的示例中为“D”),情况并非如此。
1.通过使用空列表初始化values,将丢失第一个值
可以通过以下方式解决这些问题:
1.在循环下面添加dic.update({key: values})
1.将values = []更改为values = [list2[i]]

332nm8kg

332nm8kg3#

您还可以使用collections中的defaultdict

from collections import defaultdict

list1 = ['A', 'A', 'B', 'B', 'C', 'D']

list2 = [1, 2, 3, 4, 5, 6]

d = defaultdict(list)
for key, value in zip(list1, list2):
    d[key].append(value)

print(dict(d))
{'A': [1, 2], 'B': [3, 4], 'C': [5], 'D': [6]}

相关问题