2016-11-08 67 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]'。 –