vacia tuplas lista into dict diccionarios crear convert python data-structures iteration

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]}