2017-02-04 9 views
2

Я хочу вернуть максимальное значение и его ключ из словаря, и я знаю, что-то вроде следующего должен сделать трюкВозвращает максимальное значение из словаря

max(list.iteritems(), key=operator.itemgetter(1)) 

Однако в случае, когда максимальное значение в словаре есть 6, и бывает, что несколько ключей имеют одинаковое значение .. он всегда будет возвращать первый! как я могу заставить его вернуть все ключи с максимальным числом как значения вместе со значением. Вот пример словаря с тем же максимальным значением:

dic={0: 1.4984074067880424, 1: 1.0984074067880423, 2: 1.8984074067880425, 3: 2.2984074067880425, 4: 2.2984074067880425} 

ответ

10

раствор, используя список понимание:

dic={0: 1.4984074067880424, 1: 1.0984074067880423, 2: 1.8984074067880425, 3: 2.2984074067880425, 4: 2.2984074067880425} 
max_value = max(dic.values()) # maximum value 
max_keys = [k for k, v in dic.items() if v == max_value] # getting all keys containing the `maximum` 

print(max_value, max_keys) 

Выход:

2.2984074067880425 [3, 4] 
1

Вы можете сначала определить максимум с:

maximum = max(dic.values()) 

, а затем filter на основе максимального значения:

result = filter(lambda x:x[1] == maximum,dic.items()) 

Пример в командной строке:

$ python2 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> dic={0: 1.4984074067880424, 1: 1.0984074067880423, 2: 1.8984074067880425, 3: 2.2984074067880425, 4: 2.2984074067880425} 
>>> maximum=max(dic.values()) 
>>> maximum 
2.2984074067880425 
>>> result = filter(lambda x:x[1] == maximum,dic.items()) 
>>> result 
[(3, 2.2984074067880425), (4, 2.2984074067880425)] 

Учитывая вы хотите, чтобы представить список ключей являются хорошим списком и значение, вы можете определить функцию:

def maximum_keys(dic): 
    maximum = max(dic.values()) 
    keys = filter(lambda x:dic[x] == maximum,dic.keys()) 
    return keys,maximum 

который возвращает кортеж, содержащий список ключей и максимальное значение:

>>> maximum_keys(dic) 
([3, 4], 2.2984074067880425)