Как я могу удалить повторяющиеся значения ключа из словаря - PullRequest
0 голосов
/ 25 августа 2018

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

Так что просто интересно, может ли кто-нибудь помочь / указать путь, был бы очень благодарен.Пожалуйста, найдите код ниже.

import string
# Variables and the like
alphabet = string.ascii_uppercase
fname = input('Enter the name of file which contains the cipher text: ')
file = open(fname+'.txt', 'r')
ctext = file.read()
ltrfreq = ['E','T','A','O','I','N','S','R','H','L','D','C','U','M','F','P','G','W','Y','B','V','K','X','J','Q','Z']
freqs = {}

# creating a dictionary which pairs letters to the frequency in the text
for i in alphabet:
    if ctext.count(i) == 0:
        continue
    else:
        freqs[i] = ctext.count(i)
print(freqs)

# Need some code that removes duplicate values so as we don't replace letters that have the same frequency


# Replacing the highest frequency letters with the expected value
n = 0
for i in range(0, len(freqs)):
    maximum = max(freqs, key=freqs.get)
    for j in ctext:
        ctext = ctext.replace(maximum, ltrfreq[n])
    del freqs[maximum]
    n += 1

print(ctext)  

файл, который является входным, является просто .txt файлом, который просто содержит следующее для примера:

1 Ответ

0 голосов
/ 25 августа 2018

Насколько я понимаю, вы пытаетесь заменить буквы в тексте буквами в зависимости от их частоты.И вы пытаетесь добиться того, чтобы буквы с одинаковой частотой не заменялись.То есть, если ctext имеет то же самое нет.случаев появления A и O (скажем, 4), они оба не заменены.Для этого вы можете изменить способ определения freqs.В настоящее время он сохраняет букву в качестве ключа, а его частоту - в качестве значения.Вместо этого попробуйте использовать частоту в качестве ключа, и все буквы с этой частотой сохраняются в списке в качестве значения.Как это может выглядеть - {1:["A"], 2:["B", "C"]}

Я считаю, что этот код будет работать -

for i in alphabet:
    count = ctext.count(i)
    if count == 0:
        continue
    else:
        freqs[count] = freqs.get(count, []) + [i]
print(freqs)

Теперь вы можете сортировать ключи freqs в порядке убывания и заменять соответствующие буквы.с этой частотой, только если размер списка, хранимого в качестве значения, равен 1. Например, если один из ключей в freqs равен 9, просто отметьте if len(freqs[9]) == 1 или нет.Если это так, замените букву freqs[9][0] буквой ltrfreq на ваш выбор.

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