2011-05-19 11 views
5

Debe haber una mejor manera de escribir este código Python donde tengo una lista de personas (las personas son diccionarios) y estoy tratando de encontrar el número de valores únicos de una tecla determinada (en este caso, la llave se llama nacionalidad y estoy tratando de encontrar el número de nacionalidades únicos en la lista de personas):Python: conteo eficiente número de valores únicos de una clave en una lista de diccionarios

no_of_nationalities = [] 
for p in people: 
    no_of_nationalities.append(p['Nationality']) 
print 'There are', len(set(no_of_nationalities)), 'nationalities in this list.' 

Muchas gracias

Respuesta

0
count = len(set(p['Nationality'] for p in people)) 
print 'There are' + str(count) + 'nationalities in this list.' 
+1

Si leo correctamente la publicación original, 'people' es una colección de diccionarios, pero no un diccionario en sí. –

+0

@Sven Marnach Correcto, reparado. – phihag

11

Una mejor manera es construir el set directamente desde el dict ionaries:

print len(set(p['Nationality'] for p in people)) 
0
len(set(x['Nationality'] for x in p)) 
2

Hay collections módulo

import collections 
.... 
count = collections.Counter() 
for p in people: 
    count[p['Nationality']] += 1; 
print 'There are', len(count), 'nationalities in this list.' 

De esta manera se pueden contar cada nacionalidad también.

print(count.most_common(16))#print 16 most frequent nationalities 
Cuestiones relacionadas