簡體   English   中英

將列表列表轉換為字典詞典(Python)

[英]Converting list of lists of lists into dictionary of dictionaries (Python)

假設我有一個列表X = [[[2, 2]], [[2, 5], [3, 1]], [[3, 3], [4, 4], [1, 6]], [[1, 1], [4, 0]], [[]]] 我想像這樣將X轉換成字典字典。

G = {0: {2: 2},
     1: {2: 5, 3: 1},
     2: {3: 3, 4: 4, 1: 6},
     3: {1: 1, 4: 0},
     4: {}
    }

到目前為止,我有

for i in range(0,len(X)):
    for j in range(0, len(X[i])):
        G[i] = {X[i][j][0]: X[i][j][1]}

產生

{0: {2: 2}}
{0: {2: 2}, 1: {2: 5}}
{0: {2: 2}, 1: {3: 1}}
{0: {2: 2}, 1: {3: 1}, 2: {3: 3}}
{0: {2: 2}, 1: {3: 1}, 2: {4: 4}}
{0: {2: 2}, 1: {3: 1}, 2: {1: 6}}
{0: {2: 2}, 1: {3: 1}, 2: {1: 6}, 3: {1: 1}}
{0: {2: 2}, 1: {3: 1}, 2: {1: 6}, 3: {4: 0}}
Traceback (most recent call last):
G[i] = {X[i][j][0]: X[i][j][1]}
IndexError: list index out of range

首先,它僅更新字典,而不附加新鍵;其次,我在空白列表中失敗。
有什么建議么?

如果您使用的是Python 2.7,則可以使用字典理解。

X =  [[[2, 2]], [[2, 5], [3, 1]], [[3, 3], [4, 4], [1, 6]], [[1, 1], [4, 0]], [[]]]

d = {k: dict(v) if v[0] else {} for k, v in enumerate(X)}

有人給出了一個不錯的答案,但他們刪除了該答案,他們還使用了字典理解功能,但對空列表的處理更好(我認為)。 像這樣

d = {k: dict(item for item in v if item) for k, v in enumerate(X)}

您對G指派應為:

G[i][X[i][j][0]] = X[i][j][1]

並且您需要在內部循環之前初始化G每個項目:

G[i] = {}

暫無
暫無

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

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