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

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

cinos ['cions', 'coins', 'icons', 'scion', 'sonic'] 

Теперь, когда я создал программу анаграмм, в которой есть словарь со случайными буквами в качестве ключей и анаграммы как значения, я хочу найти группу букв (ключей), которая имеет наибольшее количество анаграмм (значений) и печатать только значения , Вот что я написал:

 from collections import defaultdict f= open('dictionary.txt') d= defaultdict(list) for line in f: strip=line.rstrip() key = "".join(sorted(strip)) d[key].append(strip) count=0 for values in d.values(): if len(values)>count: count=len(values) print(values) 

Это печатает все значения, когда-либо назначенные для подсчета, но я просто хочу напечатать последнюю запись, связанную с подсчетом. Я пробовал значения [-1], но это не сработало.

4 Solutions collect form web for “Как подсчитать значения в словаре и распечатать ключ и значение, связанные с максимальной суммой”

Неясно, чего вы ожидаете

 count="".count(values) 

но Python пытается интерпретировать его как «подсчитывать количество раз, когда строковый объект, на который ссылаются values имени, появляется внутри строкового объекта '' », который приходит к неизбежному и безуспешному концу, поскольку values не являются строкой объект и '' все равно пуст.

 d = { "taf": ["aft", "fat"], ... } max_d = max(d.values(), key=len) 

Я думаю, это то, что вы пытаетесь сделать. У вас есть словарь d случайных букв в качестве ключей, а их возможные анаграммы – как список значений. Ваша цель – вернуть ключ с ДОЛГОСРОЧНЫМ списком значений, не так ли?

Тем не менее, это кажется НЕВЕРОЯТНОЙ памятью. Если бы я был вами, я бы сделал это вместо этого:

 lst_of_random_letters = ["abcdef", "abcdeg", "abcdeh" ... ] # however you're generating this def make_anagrams(letters): # however you're implementing this # but return a list of the anagrams, eg # [IN] : cions # [OUT]: ['cions', 'coins', 'icons', 'scion', 'sonic'] longest_anagrams = max((make_anagrams(letters) for letters in lst_of_random_letters), key=len) 

ваша ошибка вызвана:

 count="".count(values) 

которому вы даете values которые были определены как список в:

 d = defaultdict(list) 

как страница справки состояний count :

 count(...) S.count(sub[, start[, end]]) -> int Return the number of non-overlapping occurrences of substring sub in string S[start:end]. Optional arguments start and end are interpreted as in slice notation. 

это вряд ли сработает.

вместо этого предпочитают:

 largest_group = max(d, key=lambda x: len(d[x])) 

как было предложено @AdamSmith (отказ от ответственности: я собирался написать то же самое, что и ваш ответ)

Это вызывает len для каждого значения и возвращает самое длинное значение

 max(d.values(), key=len) 

Если 2 или более значений имеют одинаковую длину, вы все равно получите один из них

  • Python Поиск индекса максимального числа в списке
  • RuntimeWarning: недопустимое значение, встречающееся в максимуме
  • libusb-1.x VS openUsb
  • 5 максимальных значений в словаре python
  • Python - определение максимального значения во втором столбце вложенного списка
  • Есть ли функция numpy max min?
  • Используя максимум Python для возврата двух одинаково больших значений
  • Как случайным образом вернуть индекс одного из максимальных элементов в списке в Python?
  • Python - лучший язык программирования в мире.