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

标签 python list dictionary

假设我有一个列表 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)}

关于python - 将列表的列表转换为字典的字典(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30193942/

相关文章:

python - 如何合并多个列表?

python - 无法理解如何通过列表切片将字符串中的字符分配给列表在以下代码段中工作

python - 如何在 Python 中使用 tulip/asyncio 创建中继服务器?

python - 使用多个拟合图像制作图像立方体

c# - 比较两个列表并生成错误消息以指示它们与相应差异不同的任何索引的适当方法?

python - 为什么函数将错误的值附加到列表中?

c++ - C++ 中的嵌套字典/数组

python - 尝试将多个值附加到字典中的键时,Python 中出现属性错误

python - 在 Python 中获取唯一单词(即不重复)的列表

python - For循环不断迭代字符串中的相同字符两次