【问题标题】:Converting list of lists of lists into dictionary of dictionaries (Python)将列表列表转换为字典字典(Python)
【发布时间】:2015-07-23 12:11:52
【问题描述】:

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


    【解决方案1】:

    如果您使用的是 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 3。我真的需要花更多时间在列表和字典理解上。谢谢。
    【解决方案2】:

    您对G 的分配应该是:

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

    并且您需要在内部循环之前初始化G 的每个项目:

    G[i] = {}
    

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 2021-10-13
      • 2019-02-10
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2011-11-18
      • 2022-08-16
      相关资源
      最近更新 更多