2016-03-14 6 views
3

У меня есть словарь питона со значениямиМаксимальное значение ключа из словаря

d = {'A': 0, 'B': 1, 'C': 0, 'D': 4} 

result = max(d.iteritems(), key=lambda x: x[1]) 

result = ('D', 4) 

Теперь, если нет максимального значения, и все значения равны, то результат должен быть в алфавитном порядке (по возрастанию) ключей.

т.е.

d = {'A': 0, 'B': 1, 'C': 0, 'D': 1} 
result should be D 

d = {'A': 0, 'B': 5, 'C': 5, 'D': 1} 
result should be C 

Как это можно сделать в Python?

+2

Я думаю, ваш желаемый алфавитный порядок будет называться по убыванию ... – Ilja

+0

Относящиеся? [Сортировка списка Python по двум критериям] (http://stackoverflow.com/questions/5212870/sorting-a-python-list-by-two-criteria) – GingerPlusPlus

ответ

4

Отрегулируйте lambda, чтобы проверить ключ после значения (возвращая значение ключа пара)

>>> d = {'A': 0, 'B': 1, 'C': 0, 'D': 1} 
>>> max(d.iteritems(), key=lambda x: (x[1], x[0])) 
('D', 1) 
>>> d = {'A': 0, 'B': 5, 'C': 5, 'D': 1} 
>>> max(d.iteritems(), key=lambda x: (x[1], x[0])) 
('C', 5) 
+0

для объяснения: кортеж возвращается из лямбда, а кортежи сортируются «по алфавиту» (по типу, поскольку строки должны быть характерными) – Ilja

+0

@Ilja, 'x [1]' - значение, поэтому сначала значение компрометируется. Если значения двух элементов равны, то сравнивается ключ ('x [0]'): '(5, 'C')> (5, 'B')' – falsetru

+0

да, я имел в виду это (это был не вопрос, а оператор :)), но написал его более абстрактно – Ilja

Смежные вопросы