2016-05-01 30 views

cevap

8

kullanın 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 
+0

Tam olarak istediğim bu. Teşekkürler! – Malgi

5

setdefault senin arkadaşın:

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

Eğer bir (oldukça uzun) doğrultusunda yapmak istiyorsanız, itertools.groupby kullanmak, ama bu hatırlayabilir Bunun çalışması için listenin sorted olması gerekir:

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

Eğlence gerçeği: '(v [1]: v [2] vals v için 2)' dict (zip (* zip (* vals) [1:])) 'kadar uzun (ama muhtemelen çok daha fazla performans) ve okunabilir: D) – schwobaseggl