我有一个元组列表,如:
[(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中吗?谢谢!
答案 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}}