【问题标题】:nested list to nested dict python3嵌套列表到嵌套字典 python3
【发布时间】:2018-08-02 20:40:40
【问题描述】:

我有一个如下列表:

L = [[0,[1,1.0]],
     [0,[2,0.5]],
     [1,[3,3.0]],
     [2,[1,0.33],
     [2,[4,1.5]]]

我想将其转换为嵌套字典,如下所示:

D = {0:{1: 1.0,
        2: 0.5},
     1:{3: 3.0},
     2:{1: 0.33,
        4: 1.5}
     }

我不确定如何转换它。有什么建议吗?谢谢!

【问题讨论】:

标签: python list dictionary nested


【解决方案1】:

你可以使用itertools.groupby:

import itertools
L = [[0,[1,1.0]],
 [0,[2,0.5]],
 [1,[3,3.0]],
 [2,[1,0.33]],
 [2,[4,1.5]]
 ]

new_l = {a:dict([i[-1] for i in b]) for a, b in itertools.groupby(L, key=lambda x:x[0])}

输出:

{0: {1: 1.0, 2: 0.5}, 1: {3: 3.0}, 2: {1: 0.33, 4: 1.5}}

【讨论】:

  • @MLam 对此的另一个答案更好
【解决方案2】:

collections.defaultdict([default_factory[, ...]]) 类:

import collections

L = [[0,[1,1.0]],
     [0,[2,0.5]],
     [1,[3,3.0]],
     [2,[1,0.33]],
     [2,[4,1.5]]]

d = collections.defaultdict(dict)
for k, (sub_k, v) in L:
    d[k][sub_k] = v

print(dict(d))

输出:

{0: {1: 1.0, 2: 0.5}, 1: {3: 3.0}, 2: {1: 0.33, 4: 1.5}}

  • collections.defaultdict(dict) - 第一个参数提供default_factory 属性的初始值;默认为None。 将default_factory 设置为dict 使defaultdict 可用于构建字典字典

【讨论】:

  • 使用for k, (k2, v) in L:
  • 我现在看到的错误@juanpa.arrivillaga
  • @juanpa.arrivillaga,让我们开始吧
【解决方案3】:

对初学者友好,

D = {}
for i, _list in L:
    if i not in D:
        D[i] = {_list[0] : _list[1]}
    else:
        D[i][_list[0]] = _list[1]})

结果:

{0: {1: 1.0, 2: 0.5}, 1: {3: 3.0}, 2: {1: 0.33, 4: 1.5}}

【讨论】:

  • 这还不错,但不要使用D[i].update({_list[0] : _list[1]}),而是使用D[i][_list[0]] = _list[1]。更好的是,使用for k, (k2, v) in L: ... D[k][k2] = v`
  • 是的。正确的。 @juanpa.arrivillaga
  • 使用.upate另一个动态字典 更新字典,其中包含许多可能的条目。您想更新单个键值对,不要创建不必要的中间 dict 来传递给 update 方法。
  • 是的,有道理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多