2011-08-25 23 views
37

ho un dizionario come questo:5 valori massimi in un dizionario Python

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

Voglio ottenere i 5 valori massimi di questa dict e memorizzare un nuovo dict con questo. Per ottenere il valore massimo che ho fatto:

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

Forse è un compito facile, ma sono bloccato su di esso per molto tempo. Per favore aiuto!!!

risposta

48

Sei vicino. È possibile sorta l'elenco utilizzando sorted[docs] e prendere i primi cinque elementi:

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

Consulta anche: Python Sorting HowTo

+0

grazie !!!! ... mi aiuta davvero !!! :) – Alejandro

+3

Questo può essere inefficiente per un dizionario di grandi dimensioni, ma una soluzione più efficiente sarà molto più complicata. (Ad esempio, potresti implementare un Quicksort parziale che non si preoccupa di ordinare entrambe le partizioni quando la partizione superiore ha 5 o più elementi.) Molto probabilmente la tecnica 'sorted' è abbastanza buona per gli scopi dell'OP. –

+0

@ Keith: Sì, hai ragione. –

1

Prova questo:

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

grazie !!!! ... mi aiuta davvero !!! :) – Alejandro

73

Non c'è bisogno di usare iteritems e itemgetter. Il metodo get proprio del dict funziona bene.

max(A, key=A.get) 

Analogamente per l'ordinamento:

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

Infine, se la dimensione dict è illimitato, utilizzando un mucchio eventualmente sarà più veloce di un ordinamento completo.

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

Per ulteriori informazioni, hanno uno sguardo al heapq documentation.

+4

+1 per 'heapq', non lo conoscevo. –

+0

Dubito che funzionerà se 7 valori sono uguali, restituirà comunque 5 valori –

+0

Grazie, questo è buono. Sembra che quella selezionata non funzioni per python3.4 – user1953366

23

Si potrebbe utilizzare collections.Counter qui:

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

Esempio:

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

Questa è l'unica risposta che restituisce valori e chiavi, ** grazie ** –

Problemi correlati