2015-07-19 57 views
2

我正在使用一個列表從列表中的一組項目中找到一個最大值:x=max(dictionary, key=dictionary.get) 這工作正常,除非字典中的兩個或多個值相同,它只是似乎完全隨機選擇一個最大值。 有沒有一種方法,我可以得到它同時打印的最高值,可能在一個列表例如:dictionary={'A':2,'B':1,'C':2}將返回x=['A','C']Python Dict不止一個最大值

+1

你的意思是'['A','C']'? – Kasramvd

+0

@Kasra是的,謝謝 –

+0

你可以按值排序字典,然後在最後一個(鍵,值)對(最大值)上使用'itertools.groupby'? – Scott

回答

3
>>> dictionary = { 'A': 2, 'B': 1, 'C': 2 } 
>>> maxValue = max(dictionary.values()) 
>>> [k for k, v in dictionary.items() if v == maxValue] 
['C', 'A'] 

你也可以使用一個計數器來獲得的「最排序的項目常見的」(最大值):

>>> from collections import Counter 
>>> c = Counter(dictionary) 
>>> c.most_common() 
[('C', 2), ('A', 2), ('B', 1)] 

不幸的是,參數nmost_common給你n最大的元素,而不是所有的最大值,所以你需要手動進行篩選,如使用itertools.takewhile

>>> from itertools import takewhile 
>>> maxValue = c.most_common(1)[0][1] 
>>> list(takewhile(lambda x: x[1] == maxValue, c.most_common())) 
[('C', 2), ('A', 2)]