Следующий код создает словарь адресов электронной почты и частоту появления каждого сообщения. Каков наилучший способ извлечь ключ и значение для электронной почты с максимальной частотой?
fname = input("Enter file:") try: fhand = open(fname) except: print('File cannot be opened:') exit() counts = dict() for line in fhand: if line.startswith('From:'): words = line.split(' ', 1)[1] words = words.rstrip('\n') counts[words] = counts.get(words,0)+1 print(counts)
Вы можете инвертировать ключ и значение в понимании и использовать max () обычно:
count,word = max(c,w for w,c in counts.items())
Вместо этого используйте collections.Counter, который имеет most_common метод .
collections.Counter
most_common
from collections import Counter # Ignoring file opening code since it's irrelevant... counts = Counter() for line in fhand: if line.startswith('From:'): email_addr = line.rstrip('\n').split(' ', 1)[1] counts[email_addr] += 1 print(counts.most_common(1))
Или как понимание:
counts = Counter( line.rstrip('\n').split(' ', 1)[1] for line in fhand if line.startswith('From:') )
вы можете получить ключ и значение, используя
sorted(counts.items(), key=lambda x: x[1])[-1]
или
sorted(counts.items(), key=lambda x: x[1], reverse=True)[0]
На основании Получение ключа с максимальным значением в словаре?
import operator max(counts.iteritems(), key=operator.itemgetter(1))[0]
Или вы можете определить две переменные
max_count = 0 frequent = None
и добавить следующее к if предложение
if counts[words] > max_count max_count = counts[words] frequent = words
В конце frequent будет содержать наиболее частые электронные письма (или None, если в файле нет электронной почты).
frequent
None