Изменение словаря в цикле python - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь подсчитать количество букв в каком-либо тексте, добавляя каждое совпадение в словарь, а затем добавляя его в случае необходимости. Тем не менее, словарь кажется пустым в конце. Что я делаю не так?

text = "test 1234!"
dic = {}
for char in text:
    for key, value in dic:
        if key == char:
            value = value + 1
        else:
            dic[char] = 1
print(dic)

Спасибо

Ответы [ 5 ]

2 голосов
/ 10 февраля 2020

Нет необходимости перебирать диктовку, вы можете просто проверить, существует ли ключ char:

dic = {}
for char in text:
    if char in dic:
        dic[char] += 1
    else:
        dic[char] = 1
print(dic)
# Out: {'t': 2, 'e': 1, 's': 1, ' ': 1, '1': 1, '2': 1, '3': 1, '4': 1, '!': 1}

Помимо написания этого самостоятельно, вы также можете использовать реализованные модули для таких вещей, как это. Одним из вариантов будет Counter из collections модуля, который также вернет dict:

from collections import Counter
counts = Counter(text)
print(counts)
# Out: Counter({'t': 2,
#               'e': 1,
#               's': 1,
#               ' ': 1,
#               '1': 1,
#               '2': 1,
#               '3': 1,
#               '4': 1,
#               '!': 1})
1 голос
/ 10 февраля 2020

здесь вы go:

text = 'test 12234!'
dic = {}
for char in text:
    if char in dic.keys():
        dic[char] += 1
    else:
        dic[char] = 1
print(dic)

Вывод:

{'t': 2, 'e': 1, 's': 1, ' ': 1, '1': 1, '2': 2, '3': 1, '4': 1, '!': 1}
0 голосов
/ 10 февраля 2020
from collections import Counter

text = "test 1234!"
dct = Counter(text)


print(dct)
0 голосов
/ 10 февраля 2020

Заявленный вами di c пустой, поэтому зацикливание на нем ничего не даст.

0 голосов
/ 10 февраля 2020

Вы можете использовать defaultdict, чтобы избежать if-else или любой итерации по словарю в целом.

from collections import defaultdict

text = "test 1234!"
dic = defaultdict(int)

for char in text:
    dic[char] += 1

print(dic)

A defaultdict присваивает начальное значение по умолчанию в случае, если ключ отсутствует в словаре.

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