33 votes

PYTHON: Conversion d'une liste de tuples en un dictionnaire

Je cherche un moyen de convertir une liste de tuples qui ressemble à ceci:

 [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
 

dans un dictionnaire , où la paire clé: valeur ressemble à ceci:

 {4:[1,2,3] ,15:[4,5,9,11,12], 23:[6,7,8,10]}
 

Le deuxième élément d'un tuple devient une clé de dictionnaire. Le premier élément de tuple est affecté à cette clé.

Pouvez-vous me montrer comment cela peut être fait?

50voto

S.Lott Points 207588
>>> from collections import defaultdict
>>> l= [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
>>> d= defaultdict( list )
>>> for v, k in l:
...     d[k].append(v)
... 
>>> d
defaultdict(<type 'list'>, {23: [6, 7, 8, 10], 4: [1, 2, 3], 15: [4, 5, 9, 11, 12]})
>>> [ {k:d[k]} for k in sorted(d) ]
[{4: [1, 2, 3]}, {15: [4, 5, 9, 11, 12]}, {23: [6, 7, 8, 10]}]

14voto

FogleBird Points 23405
>>> a = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
>>> b = {}
>>> for i, j in a:
...     b.setdefault(j, []).append(i)
...
>>> b
{23: [6, 7, 8, 10], 4: [1, 2, 3], 15: [4, 5, 9, 11, 12]}
>>>

2voto

c089 Points 1752
l = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
d = {}
for v, k in l:
    d.setdefault(k, []).append(v)

2voto

Adam Points 2544
tuples = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)]
dicts = {}
for elem in tuples:
    try:
    	dicts[elem[1]].append(elem[0])
    except KeyError:
    	dicts[elem[1]] = [elem[0],]

2voto

Martin Blech Points 5031

Cela fera:

 from collections import defaultdict

def to_list_of_dicts(list_of_tuples):
    d = defaultdict(list)
    for x, y in list_of_tuples:
        d[y].append(x)
    return sorted([{x: y} for (x, y) in d.items()])
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X