2011-08-25 18 views
37

mam słownika tak:5 maksymalne wartości w słowniku Pythona

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

Chcę, aby uzyskać maksymalne wartości tego dict 5 i zapisać nowe dict z tym. Aby uzyskać maksymalną wartość, którą wykonałem:

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

Być może jest to łatwe zadanie, ale utknąłem na nim przez długi czas. Proszę pomóż!!!

Odpowiedz

48

Jesteś blisko. Można rodzaj lista użyciu sorted[docs] i podjąć pierwsze pięć elementów:

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

Zobacz także: Python Sorting HowTo

+0

dziękuję !!!! ... to naprawdę mi pomaga !!! :) – Alejandro

+3

Może to być niewystarczające dla dużego słownika, ale bardziej wydajne rozwiązanie będzie znacznie bardziej skomplikowane. (Na przykład, możesz zaimplementować częściowy Quicksort, który nie zajmuje się sortowaniem obu partycji, gdy wyższa partycja ma 5 lub więcej elementów.) Najprawdopodobniej technika "posortowana" jest wystarczająco dobra dla celów PO. –

+0

@Keith: Tak, masz rację. –

1

Spróbuj tego:

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

dziękuję !!!! ... to naprawdę pomaga mi !!! :) – Alejandro

73

ma potrzeby korzystania iteritems i itemgetter. Metoda get dicta działa dobrze.

max(A, key=A.get) 

Podobnie do sortowania:

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

Wreszcie, jeśli wielkość dict jest nieograniczona, za pomocą sterty ostatecznie będzie szybciej niż pełny rodzaju.

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

Aby uzyskać więcej informacji, spójrz na numer heapq documentation.

+4

+1 dla 'heapq', nie znałem tego. –

+0

Wątpię, że zadziała, jeśli 7 wartości będą takie same, nadal będzie zwracać 5 wartości. –

+0

Dzięki, to jest dobre. Wygląda na to, że wybrany nie działa dla python3.4 – user1953366

23

Można użyć collections.Counter tutaj:

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

Przykład:

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

Jest to jedyna odpowiedź, która zwraca wartości, a także klawisze, ** dziękuję ** –

Powiązane problemy