[英]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.