我有一个列表如下:
L = [[0,[1,1.0]],
[0,[2,0.5]],
[1,[3,3.0]],
[2,[1,0.33],
[2,[4,1.5]]]
我想将它转换为嵌套的dict,如下所示:
D = {0:{1: 1.0,
2: 0.5},
1:{3: 3.0},
2:{1: 0.33,
4: 1.5}
}
我不确定如何转换它。有什么建议吗?谢谢!
答案 0 :(得分:7)
初学者友好,
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}}
答案 1 :(得分:6)
使用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
对于构建词典词典非常有用。答案 2 :(得分: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}}