Python - Ошибка в 'for' l oop для достижения максимального значения словаря - PullRequest
0 голосов
/ 13 февраля 2020

Это первая часть кода:

handle = open('mbox-short.txt')

sender = dict()
words = list()

for line in handle:
    if line.startswith('From '):
        words = line.split()
        email = words[1]
        sender[email] = sender.get(email, 0) + 1

Возвращает этот словарь (отправитель):

sender = {'stephen.marquard@uct.ac.za': 2, 'louis@media.berkeley.edu': 3, 'zqian@umich.edu': 4}

Это вторая часть кода:

for key in sender:

    if max == None:
        value = int(sender[key])
        max = value

    else:
        value = int(sender[key])
        if max < value: 
#(TypeError: '<' not supported between instances of 'builtin_function_or_method' and 'int' happens here)
            max = value

print(sender, max)

Когда я запускаю каждую часть кода по отдельности, это работает, но вместе эта трассировка приходит. Почему проблема сохраняется, если я превратил переменные 'max' и 'value' в целые числа?

Заранее спасибо.

1 Ответ

2 голосов
/ 13 февраля 2020

Вы используете max с параметром key.

max(sender,key=lambda x:sender[x])
#'zqian@umich.edu'

Об ошибке в вашей части для l oop

max является встроенной

>>> max
<function max>

if max==None: всегда ложно. Таким образом, он переходит на else часть, которая является

else:
    value = int(sender[key])
    if max < value:

>>> max < 2
#TypeError: '<' not supported between instances of 'builtin_function_or_method' and 'int'

Используйте имена переменных, которые не конфликтуют со встроенными и ключевыми словами.

...