2016-11-08 75 views
0

假設我有此詞典: { 「A」:3, 「B」:4, 「H」:1, 「K」:8, 「T」:0}如何從字典中獲得最高價值的3個項目?

我想拿到鑰匙最高的3個值的(所以在這種情況下,我會拿到鑰匙:KB和A)

+0

使用'd = {「A」:3,「B」:4,「H」:1,「K」:8,「T」:0}',你可以做'dict(sorted(d。 iteritems(),key = operator.itemgetter(1),reverse = True)[:3]).key()',打印'['A','K','B']' – davedwards

+0

不完全重複 - - 這個問題要求3(或N)個最大,另一個問題的答案是按照價值排序的整個字典。在很多情況下,您可以通過使用'heapq.nlargest'來更高效地獲取N個最大值:'import heapq; heapq.nlargest(3,my_dict,key = my_dict.get)'。 –

回答

1

您可以使用簡單的列表理解表達爲:

>>> sorted(my_dict, key=my_dict.get, reverse=True)[:3] 
['K', 'B', 'A'] 

,或者如果你可以使用collections.Counter()還需要價值:

>>> from collections import Counter 
>>> my_dict = {"A":3,"B":4,"H":1,"K":8,"T":0} 
>>> c = Counter(my_dict) 
>>> mc = c.most_common(3) # returns top 3 values 
# content of mc: [('K', 8), ('B', 4), ('A', 3)] 

# For getting the keys from "mc": 
# >>> [key for key, val in mc] 
# ['K', 'B', 'A'] 
+3

不需要使用Counter,真的。只是'排序(d,key = d.get,reverse = True)[:3]'。 –