2011-08-25 22 views
37

que tienen un diccionario de esta manera:5 valores máximos en un diccionario Python

A = {'a':10, 'b':843, 'c': 39,.....} 

Quiero conseguir los 5 valores máximos de este dict y almacenar un nuevo dict con esto. Para obtener el valor máximo que hice:

max(A.iteritems(), key=operator.itemgetter(1))[0:] 

Quizás es una tarea fácil, pero estoy atrapado en ella durante mucho tiempo. ¡¡¡Por favor ayuda!!!

Respuesta

48

Estás cerca. Puede tipo la lista mediante sorted[docs] y dar los primeros cinco elementos:

newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5]) 

Consulte también: Python Sorting HowTo

+0

gracias !!!! ... lo que realmente me ayuda !!! :) – Alejandro

+3

Esto puede ser ineficiente para un diccionario grande, pero una solución más eficiente será mucho más complicada. (Por ejemplo, podría implementar una Quicksort parcial que no moleste en ordenar ambas particiones cuando la partición más alta tenga 5 o más elementos.) Lo más probable es que la técnica 'ordenada 'sea lo suficientemente buena para los propósitos del PO. –

+0

@ Keith: Sí, tienes razón. –

1

Prueba esto:

dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5]) 
+0

gracias !!!! ... ¡realmente me ayuda! :) – Alejandro

73

No hay necesidad de utilizar iteritems y itemgetter. El propio método get de dict funciona bien.

max(A, key=A.get) 

Del mismo modo para clasificar:

sorted(A, key=A.get, reverse=True)[:5] 

Por último, si el tamaño dict es ilimitado, usando un montón con el tiempo será más rápido que una especie completa.

import heapq 
heapq.nlargest(5, A, key=A.get) 

Para obtener más información, echar un vistazo a la heapq documentation.

+4

+1 por 'heapq', no sabía esto. –

+0

Dudo que funcione si 7 valores son iguales, todavía devolverá 5 valores –

+0

Gracias, esto es bueno. Parece que el seleccionado no funciona para python3.4 – user1953366

23

Usted podría utilizar collections.Counter aquí:

dict(Counter(A).most_common(5))

Ejemplo:

>>> from collections import Counter 
>>> A = {'a' : 1, 'b' : 3, 'c' : 2, 'd' : 4, 'e' : 0, 'f' :5} 
>>> dict(Counter(A).most_common(5)) 
{'a': 1, 'c': 2, 'b': 3, 'd': 4, 'f': 5} 
+1

Esta es la única respuesta que devuelve valores y claves, ** gracias ** –

Cuestiones relacionadas