into - Convertir una lista de tuplas en un Dict en Python
python list to dict (5)
Tengo una lista de tuplas como esta:
[
(''a'', 1),
(''a'', 2),
(''a'', 3),
(''b'', 1),
(''b'', 2),
(''c'', 1),
]
Quiero iterar a través de esta incrustación por el primer elemento, así que por ejemplo podría imprimir algo como esto:
a 1 2 3
b 1 2
c 1
¿Cómo voy a hacer esto sin guardar un ítem para rastrear si el primer ítem es igual a como rizo alrededor de las tuplas? Esto se siente bastante desordenado (además tengo que ordenar la lista para empezar) ...
Gracias,
Dan
Imprimir lista de tuplas agrupadas por el primer elemento
Esta respuesta se basa en @gommen one .
#!/usr/bin/env python
from itertools import groupby
from operator import itemgetter
L = [
(''a'', 1),
(''a'', 2),
(''a'', 3),
(''b'', 1),
(''b'', 2),
(''c'', 1),
]
key = itemgetter(0)
L.sort(key=key) #NOTE: use `L.sort()` if you''d like second items to be sorted too
for k, group in groupby(L, key=key):
print k, '' ''.join(str(item[1]) for item in group)
Salida:
a 1 2 3
b 1 2
c 1
Ligeramente más simple ...
>>> from collections import defaultdict
>>> fq= defaultdict( list )
>>> for n,v in myList:
fq[n].append(v)
>>> fq
defaultdict(<type ''list''>, {''a'': [1, 2, 3], ''c'': [1], ''b'': [1, 2]})
Solo haría lo básico
answer = {} for key, value in list_of_tuples: if key in answer: answer[key].append(value) else: answer[key] = [value]
Si es así de breve, ¿por qué usar algo complicado? Por supuesto, si no te molesta usar setdefault también está bien.
Una solución usando groupby
>>> from itertools import groupby
>>> l = [(''a'',1), (''a'', 2),(''a'', 3),(''b'', 1),(''b'', 2),(''c'', 1),]
>>> [(label, [v for l,v in value]) for (label, value) in groupby(l, lambda x:x[0])]
[(''a'', [1, 2, 3]), (''b'', [1, 2]), (''c'', [1])]
groupby (l, lambda x: x [0]) le proporciona un iterador que contiene [''a'', [(''a'', 1), ...], c, [(''c'', 1)],. ..]
l = [
(''a'', 1),
(''a'', 2),
(''a'', 3),
(''b'', 1),
(''b'', 2),
(''c'', 1),
]
d = {}
for x, y in l:
d.setdefault(x, []).append(y)
print d
produce:
{''a'': [1, 2, 3], ''c'': [1], ''b'': [1, 2]}