Как вы выводите наиболее часто используемый элемент в Python CFD-словаре, используя встроенную функцию max? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь использовать max, чтобы найти вывод наибольшее значение, прикрепленное к ключу в словаре CFD Python. На этом веб-сайте (https://www.hallada.net/2017/07/11/generating-random-poems-with-python.html)) меня убедили, что max можно использовать для правильного нахождения значения CFD. Однако я обнаружил, что, похоже, он не дает правильных результатов, когда частота элементов в словаре CFDизменен.

Я новичок в Python, и я думаю, что я могу просто смущаться, как вызывать данные. Я попытался отсортировать список, полагая, что смог получить значения в ключах, чтобы они были отсортированы, но яне думаю, что я тоже понимаю, как это сделать.

words = ('The quick brown fox jumped over the '
         'lazy the lazy the lazy dog and the quick cat').split(' ')
from collections import defaultdict
cfd = defaultdict(lambda: defaultdict(lambda: 0))
for i in range(len(words) - 2):  # loop to the next-to-last word
    cfd[words[i].lower()][words[i+1].lower()] += 1

{k: dict(v) for k, v in dict(cfd).items()}
max(cfd['the'])

Наиболее распространенное слово после "the" - "lazy". Однако python выводит последнее слово в словаре CFD, которое "быстро. "

1 Ответ

1 голос
/ 06 ноября 2019

Ваша проблема в том, что cfd ['the'] является диктом, и, поскольку max перебирает его в необработанном виде, он фактически перебирает только ключи. В этом случае «быстрый» больше, чем «ленивый», потому что строки.

Измените ваш максимум на: max(cfd['the'].items(), key=lambda x: x[1])

...