簡體   English   中英

Python從具有重復鍵的列表創建嵌套字典

[英]Python creating nested dictionary from a List with repeating keys

我正在嘗試將列表轉換為字典。 我有一個這樣的列表列表,並且迷你列表的一些第一個值正在重復:

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} }

您可以使用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}}

您可以分兩步完成: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}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM