Понимание словаря и проверка ключей при создании

1

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

chrDict = {}
with open("gibrish.txt", 'r') as file:
    for char in file.read():
        if char not in chrDict:
            chrDict[char] = 1
        else:
            chrDict[char] += 1

Итак, это работает нормально, но для меня, по крайней мере, на Python, это выглядит очень уродливо. Я пробовал разные способы использования понимания. Есть ли способ сделать это с пониманием? Я пытался использовать locals() во время создания, но это казалось очень медленным, плюс, если бы я понял что-то правильно, локальные жители включили бы все в область, в которой было реализовано понимание, что усложняло ситуацию.

Теги:
dictionary
list-comprehension

4 ответа

7
Лучший ответ

В Python 2.7 вы можете использовать Counter:

from collections import Counter

with open("gibrish.txt", 'r') as file:
    chrDict = Counter(f.read())
  • 0
    Вот счетчик, перенесенный в python 2.5: code.activestate.com/recipes/576611-counter-class
  • 0
    Счетчик кажется действительно хорошим вариантом. Спасибо!
4

Использовать defaultdict:

from collections import defaultdict

chr_dict = defaultdict(int)
with open("gibrish.txt", 'r') as file:
    for char in file.read():
        chr_dict[char] += 1

Если вы действительно хотите использовать списки, вы можете использовать этот неэффективный вариант:

text = open("gibrish.txt", "r").read()
chr_dict = dict((x, text.count(x)) for x in set(text))
0

Использование словарного понимания:

content = open("missing.txt", 'r').read()
print({ch:content.count(ch) for ch in content})
0

Словарь get() метод вернет вам значение, если оно существует, или 0.

chrDict = {}
with open("gibrish.txt", 'r') as file:
   for char in file.read():
        chrDict[char] = chrDict.get(char, 0) + 1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню