Python从具有重复键的列表创建嵌套字典

2024-05-15 11:21:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图把清单转换成字典。 我有一个这样的列表,一些小列表的第一个值正在重复:

list = [["DDS 500","A",300], ["DDS 500","B",100], ["AGB 850","C",250], ["AGB 850","B",350], ["UNI 100","D",900]]

迷你列表的第一个值将是key。然后,对于每个小列表,第二个和第三个值将是该键的“值”,并且这些值也应该是一个字典。因此,最终词典应如下所示:

dict = { "DDS 500":{"A":300,"B":100}, "AGB 850":{"C":250,"B":350}, "UNI 100":{"D":900} }


Tags: key列表字典dictlist词典unidds
3条回答

您可以通过两个步骤来完成:1)创建包含所有键和空字典的字典作为值,2)将值作为字典合并到每个键中:

lst = [["DDS 500","A",300], ["DDS 500","B",100], ["AGB 850","C",250], ["AGB 850","B",350], ["UNI 100","D",900]]

d = { k:dict() for k,*_ in lst }
for k,*v in lst: d[k].update(dict([v]))

输出:

print(d)

# {'DDS 500': {'A': 300, 'B': 100}, 'AGB 850': {'C': 250, 'B': 350}, 'UNI 100': {'D': 900}}

您可以使用collections.defaultdict

from collections import defaultdict

lst= [["DDS 500","A",300], ["DDS 500","B",100], ["AGB 850","C",250], ["AGB 850","B",350], ["UNI 100","D",900]]

out=defaultdict(dict)

for k,ik,iv in lst:
    out[k].update({ik:iv})

输出:

defaultdict(dict,
            {'DDS 500': {'A': 300, 'B': 100},
             'AGB 850': {'C': 250, 'B': 350},
             'UNI 100': {'D': 900}})

如果不想导入任何模块,可以使用dict.setdefault

result = {}

for k1, k2, v in my_list:
    result.setdefault(k1, {})[k2] = v
result

输出:

{'DDS 500': {'A': 300, 'B': 100},
 'AGB 850': {'C': 250, 'B': 350},
 'UNI 100': {'D': 900}}

相关问题 更多 >