私は次のようにタプルのリストを持っている:タプルのリストを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}}
は、Pythonでそれは可能ですか?ありがとう!
私は次のようにタプルのリストを持っている:タプルのリストを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}}
は、Pythonでそれは可能ですか?ありがとう!
使用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
setdefault
はあなたの友達です:
d = {}
for t in l:
d.setdefault(t[0],{})[t[1]]=t[2]
あなたは1(かなり長い)ラインでそれをしたい場合は、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}}
おもしろい事実: '{v [1]:v [2] for vals}'は 'dict(zip(* zip(* vals)[1:]))'とまったく同じです読める:D) – schwobaseggl
try 'defaultdict' – gdlmx