2013-02-15 3 views
0

Существует много примеров, которые показывают, как найти максимальное значение в dict. Мне было любопытно, но почему максимальный ключ/значение не может быть найден таким образом.для цикла через dict, чтобы найти max

from random import randint 

# Create dict with random keys and values. 
d = {randint(1, 99): randint(1, 99) for i, j in enumerate(range(20))} 

# Loop through dict to find max value 
maxi = 0 
for key in d: 
    if d[key] > maxi: 
     maxi = key 

print(d, d[maxi]) 

Визуальная проверка d, можно видеть, что d [maxi] не является максимальным значением.

+0

Вы можете использовать функцию 'max()', если вы укажете параметр 'key'. Например: 'max (d, lambda x: d [x])' – Matt

+0

И вы не должны использовать 0 в качестве исходного max, если вы не всегда будете иметь положительные числа в dict. –

+1

@Matt Нет необходимости в уродливой лямбда. Используйте 'max (d, key = d.get)' – wim

ответ

4

if d[key] > maxi сравнивает текущее значение с максимальным ключом. Простейшим изменением было бы написать if d[key] > d[maxi]. (Вы также можете сохранить максимальное значение как свою собственную переменную).

0
>>> d = {"a": 5, "b": 99, "c": 3} 
>>> max(d, key=d.get) 
'b' 
+1

лучше 'max (d, key = d.get)' – wim

1

Проблема с кодом является то, что первый раз, когда вы значение больше чем 0 вы храните ключ вместо значения. Затем вы сравниваете следующее значение с последним ключ, который вы сохранили.

В конце вы храните номер, который вам не нужен (я не знаю, существует ли даже логика для числа, которое заканчивается в maxi - я думаю, это просто еще одно случайное число).

0

Альтернативой этому было бы получить ключ, значение с использованием словарей элементов() функции и сравнить значения, чтобы найти макс.

max_key = None 
max_val = None 

for key, val in your_dict.items(): 

    if max_val is None or val > max_val: 
     max_val = val 
     max_key = key 


print(max_key, max_val) 
Смежные вопросы