Как получить доступ к словарю внутри функции? - PullRequest
0 голосов
/ 16 апреля 2020

Мне нужно найти максимальное значение freq.

def frequency_map(text, k):
  n = len(text)
  freq = {}
  for i in range(n-k+1):
      pattern = text[i:i+k]
      if not pattern in freq:
        freq[pattern] = 1
      else:
        freq[pattern] += 1
  return freq 


text = 'massachusettsassemblymass'
k = 3

print(frequency_map(text, k))
print(max(freq.values()))

Это дает NameError. name 'freq' is not defined. Как go об этом? Необходимо найти все ключи с максимумами.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

Вы должны начать с присвоения значения переменной:

freq = frequency_map(text, k)

Затем вы можете найти максимальное значение, изменив, какую функцию max использует для определения «максимальности» с помощью key=func:

m = max(freq.items(), key=lambda x: x[1])

Затем вы можете отфильтровать словарь для всех значений, соответствующих этому максимуму, передав соответствующий предикат:

all_max = dict(filter(lambda x: x[1] == m[1], freq.items()))

Возвращает:

{'ass': 3}
0 голосов
/ 16 апреля 2020

Сразу после k = 3 Запись temp = frequency_map(text, k) Затем используйте max(freq.values()) на temp вместо freq.

Когда вы вызываете эту функцию, она возвращает список, который вы напечатали в вашем первом print заявление. Но после этого вы нигде не храните список, поэтому программа просто выбросит его, когда попытаетесь использовать его во втором операторе печати, программа не найдет его и выдаст ошибку.

Таким образом, вам нужно сохранить этот список, чтобы использовать его снова.

0 голосов
/ 16 апреля 2020
def frequency_map(text, k):
    n = len(text)
    freq = {}
    for i in range(n - k + 1):
        pattern = text[i:i + k]
        if not pattern in freq:
            freq[pattern] = 1
        else:
            freq[pattern] += 1
    return freq

text = 'massachusettsassemblymass'
k = 3

frequencies = frequency_map(text, k)
print(frequencies)
highest_freq = (max(frequencies.values()))
print({k: v for k, v in frequencies.items() if v == highest_freq})
...