将列表中的列表转换为字典中的字典(Python)

2024-06-02 06:50:28 发布

您现在位置: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: {}
    }

到目前为止

^{pr2}$

产生

{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

首先,它只更新字典而不附加新的键,其次它在我的空列表中失败。
有什么建议吗?


Tags: ofmost列表index字典rangecallout
2条回答

您对G的分配应该是:

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

您需要在内部循环之前初始化G的每一项:

^{pr2}$

如果您使用的是python2.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)}

有人有一个很好的答案,但他们删除了,他们也使用字典理解,但处理空名单更好(我认为)。就这样过去了

^{pr2}$

相关问题 更多 >