Как обновить список целых чисел, содержащихся в словаре в python - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь создать бота-палача, который проходит через весь язык Engli sh и считает каждое слово одинаковой длины, символ за символом. Идея состоит в том, что бот будет возвращать наиболее часто используемые символы длины x с индексами y. До сих пор мне удалось импортировать все слова в список и отфильтровать этот список только по словам x длины. Кажется, у меня возникают проблемы с обновлением индексов y.

Для выполнения sh этой задачи я создал словарь, в котором списки хранятся в виде ключевых значений внутри этого словаря. ВСЕ индексы для длины слова были инициализированы равными 0. Идея состоит в том, что я бы go прошел по всей длине слова для всех слов и посчитал вхождение символа по указанному c индексу. Таким образом, мой словарь на самом деле выглядит примерно так:

D = {'a': [0, 0, …, 0], 'b':[0, 0, …, 0], …, 'z': [0, 0, …, 0]}

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

D = {'a': [4137, 568, …, 897], …., 'z':[523, 129, … , 321]}

Мое текущее решение пытается сопоставить индексы с ключами и увеличить каждый из индексов, но я получаю следующее сообщение об ошибке:

TypeError: списочные индексы должны быть целыми числами или кусочками, а не str

Я знаю, что это было много, но я очень ценю любую помощь. Спасибо за ваше время и терпение.

def occurence_of_characters(L, word):
    length_word = len(word)

    letters = string.ascii_letters
    numbers = string.digits
    characters = letters + numbers + "-" + "."
    characterlist = list(characters)

    D = {i:[0 for j in range(length_word)] for i in characterlist}
    #0 for j in range(length_word)
    for word in L:
        for key in D:
            #l = D.get(key)
            if key in word:
                for index in key:
                    D[key][int(index)] = list(map(map(lambda index: index+1, D[key][index]), D[key] ))
    print(D)

1 Ответ

0 голосов
/ 08 марта 2020

Вы можете сделать что-то вроде этого:

def occurence_of_characters(word_list):
    length_word = len(word_list[0])
    characters = string.ascii_letters + string.digits + '.-'
    counts = {c:[0]*length_word for c in characters}
    for word in word_list:
        for i, c in enumerate(word):
            if c in counts:
                counts[c][i] += 1
    return counts


my_list = ['mark', 'cats', 'dogs', 'zips', 'rats']
D = occurence_of_characters(my_list)
for c in 'atsz':
    print(f'{c}: {D[c]}')

Вывод:

a: [0, 3, 0, 0]
t: [0, 0, 2, 0]
s: [0, 0, 0, 4]
z: [1, 0, 0, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...