我有一个元组列表,例如:
[(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中实现吗?谢谢!
我有一个元组列表,例如:
[(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}}
使用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
setdefault
是你的好朋友:
d = {}
for t in l:
d.setdefault(t[0],{})[t[1]]=t[2]
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
defaultdict
。 - gdlmx