簡體   English   中英

如何在Python中將列表列表轉換為dict

[英]How to convert list of list to dict of dict in Python

我不太確定如何用語言解釋它,我想做的是將其轉換為:

my_list = [['a','b',1],['a','c',2],['b','a',3],['b','c',4]]

變成這樣的東西:

my_dict = {'a':{'b':1,'c':2},'b':{'a':3,'c':4}}

我試過了

for item in my_list:
   my_dict[item[0]]= {item[1]:item[2]}

卻沒有達到我想要的結果。

當字典中已經有一個鍵時,您需要使用.update而不是用新的鍵替換值。

>>> my_list = [['a', 'b', 1], ['a', 'c', 2], ['b', 'a', 3], ['b', 'c', 4]]
>>> my_dict = {}
>>> for item in my_list:
...     try:
...         my_dict[item[0]].update({item[1]: item[2]})
...     except KeyError:
...         my_dict[item[0]] = {item[1]: item[2]}
... 
>>> my_dict
{'b': {'c': 4, 'a': 3}, 'a': {'b': 1, 'c': 2}}

通常,您應該以collections.defaultdict開頭,它為所有缺少的元素返回一個空字典。

然后,您可以遍歷外部列表,以獲取子列表的第一個列表元素的條目,並將第二個元素的字典條目的值設置為第三個元素的值。

您提出的解決方案的問題是,每次在外部字典中遇到相同的鍵時,您都會覆蓋內部字典。 而不是使用

my_dict[item[0]]={item[1]:item[2]}

您需要使用.setdefault方法,以便它在不存在dict時創建dict,在不存在的情況下僅獲取它。 然后,您可以使用新的鍵值對對其進行更新。

my_dict.setdefault(item[0], {})[item[1]] = item[2]
my_list = [['a','b',1],['a','c',2],['b','a',3],['b','c',4]]

my_dict = {}
for item in my_list:
    if item[0] not in my_dict:
        my_dict[item[0]]= {item[1]:item[2]}
    else:
        my_dict[item[0]][item[1]] = item[2]


print(my_dict)

輸出:

{'b': {'c': 4, 'a': 3}, 'a': {'b': 1, 'c': 2}}

暫無
暫無

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

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