2016-09-30 5 views
0

У меня есть словарь с IP-адресами и их свободное пространство памяти. Я пытаюсь сохранить IP для одной переменной и следующей самой высокой для одной переменной.Python dict key с максимальным значением

masterdict: {'192.168.100.102': '1620', '192.168.100.103': '470', '192.168.100.101': '1615'} 

print masterdict 

rmip = max(masterdict, key=masterdict.get) 

print "<br>rmip<br>" 
print rmip 

del masterdict [rmip] 

print "<br>masterdict after deletion<br><br>" 
print masterdict 

nnip = max(masterdict, key=masterdict.get) 

print "<br>nnip<br>" 
print nnip 

Но выход я получаю:

masterdict { '192.168.100.102': '1620', '192.168.100.103': '470', '192.168.100.101': ' 1615 '}

rmip 192.168.100.103

masterdict после удаления {' 192.168.100.102' : '1620', '192.168.100.101': '1615'}

nnip 192.168.100.102

Почему печать 192.168.100.103 как rmip? Разве это не самая высокая ценность? то есть 192.168.100.102, а затем 101 как nnip?

ответ

4

Значения в вашем словаре - строки, так что max сравнивает их как строки. Если вы хотите, чтобы сравнить их как целые числа, то вам необходимо использовать функцию ключа для преобразования строк в целые числа ...:

rmip = max(masterdict, key=lambda key: int(masterdict[key]) 

Или изменить значения int, а затем использовать текущее утверждение макс:

masterdict = {k: int(v) for k, v in masterdict.items()} 
rmip = max(masterdict, key=masterdict.get) 
+2

или изменить значения masterdict как ints, а текущая функция 'max' будет работать – depperm

+0

Большое спасибо. Это отлично работает. @depperm Umm no. Этот дикт создан таким образом. Я беру значения памяти из группы виртуальных машин. И они сохраняются как струны. Я не слишком уверен, как это изменить. – Aditya

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