2012-01-12 11 views
9

tengo una lista de diccionarios, por ejemplo:mejor manera de ordenar un diccionario en grupos utilizando Python

[{'person':'guybrush','job':'pirate'},{'person':'leChuck','job':'pirate'}, {'person':'elaine','job':'governor'}] 

Quiero mostrar a la gente agrupados por sus puestos de trabajo. Entonces, en el frente, podemos seleccionar un trabajo y ver a todas las personas que tienen el trabajo seleccionado.

Realicé dicha función antes de utilizar bucles y listas anómalas confusos.

¿Cuál cree que es la forma más eficiente de obtener este resultado?

pirate = ['guybrush','leChuck'] 
governor = ['elaine'] 
+1

posible duplicado del [grupo de Python] (http://stackoverflow.com/questions/3749512/python-group-by) –

+0

estás bien, parece que he duplicado una pregunta. ¡Lo siento! – JackalopeZero

+0

¿Qué tiene que ver ágil con esto? –

Respuesta

21

Esto es simple utilizando un defaultdict:

persons_by_jobs = defaultdict(list) 
for person in persons: 
    persons_by_jobs[person['job']].append(person['person']) 
+0

solo curioso @ Björn Pollex ¿Qué te hizo elegir esto en lugar de una operación grupal? – HussienK

+3

Si está hablando de ['itertools.groupby'] (https://docs.python.org/3/library/itertools.html#itertools.groupby), requiere que la lista ya esté ordenada por el predicado de agrupación. Esto significa que necesitaríamos dos pasadas sobre los datos, uno para clasificar y otro para agrupar. Creo que la solución que he presentado aquí es más simple y probablemente más eficiente. –

Cuestiones relacionadas