如何将元组列表转换为Python中的字典字典?

时间:2016-05-01 17:51:27

标签: python list dictionary tuples

我有一个元组列表,如:

[(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中吗?谢谢!

3 个答案:

答案 0 :(得分:9)

使用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

答案 1 :(得分:5)

setdefault是你的朋友:

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

答案 2 :(得分:4)

如果您想在一个(相当长的)行中执行此操作,则可以使用itertools.groupby,但请记住,该列表必须为sorted才能使其生效:

>>> 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}}