如何在Python中将元组列表转换为字典嵌套字典?

5

我有一个元组列表,例如:

[(1, 'a', 22), (2, 'b', 56), (1, 'b', 34), (2, 'c', 78), (3, 'd', 47)]

我需要将其转换为:

{1: {'a': 22, 'b': 34}, 2: {'b': 56, 'c': 78}, 3: {'d': 47}}

能在Python中实现吗?谢谢!

你可以尝试使用defaultdict - gdlmx
3个回答

10

使用defaultdict

from collections import defaultdict

l = [(1, 'a', 22), (2, 'b', 56), (1, 'b', 34), (2, 'c', 78), (3, 'd', 47)]

d = defaultdict(dict)
for x, y, z in l:
    d[x][y] = z

那正是我想要的。谢谢! - Malgi

5

setdefault是你的好朋友:

d = {}
for t in l:
    d.setdefault(t[0],{})[t[1]]=t[2]

4
如果您想在一行中完成它(虽然有点长),您可以使用itertools.groupby,但请记住,此方法需要按键进行排序才能正常运行:
>>> lst = [(1, 'a', 22), (2, 'b', 56), (1, 'b', 34), (2, 'c', 78), (3, 'd', 47)]
>>> {key: {v[1]: v[2] for v in vals} for key, vals in itertools.groupby(sorted(lst), key=operator.itemgetter(0))}
{1: {'a': 22, 'b': 34}, 2: {'b': 56, 'c': 78}, 3: {'d': 47}}

有趣的事实:{v[1]: v[2] for v in vals}dict(zip(*zip(*vals)[1:])) 一样长(但可能更高效和易读:D) - user2390182

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接