Как вытащить ключ и значение предмета с максимальным значением из словаря python - PullRequest
0 голосов
/ 14 февраля 2020

Следующий код создает словарь адресов электронной почты и частоту появления каждого сообщения. Каков наилучший способ извлечь ключ и значение для электронной почты с максимальной частотой?

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)

Ответы [ 4 ]

0 голосов
/ 14 февраля 2020

Вы можете инвертировать ключ и значение в понимании и использовать max () обычно:

count,word = max(c,w for w,c in counts.items())
0 голосов
/ 14 февраля 2020

Вместо этого используйте 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:')
    )
0 голосов
/ 14 февраля 2020

вы можете получить ключ и значение, используя

sorted(counts.items(), key=lambda x: x[1])[-1]

или

sorted(counts.items(), key=lambda x: x[1], reverse=True)[0]
0 голосов
/ 14 февраля 2020

На основании Получение ключа с максимальным значением в словаре?

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, если в файле нет электронной почты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...