У меня была эта задача прочитать файл, сохранить каждый символ в 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() во время создания, но это казалось очень медленным, плюс, если бы я понял что-то правильно, локальные жители включили бы все в область, в которой было реализовано понимание, что усложняло ситуацию.
В Python 2.7 вы можете использовать Counter
:
from collections import Counter
with open("gibrish.txt", 'r') as file:
chrDict = Counter(f.read())
Использовать 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))
Использование словарного понимания:
content = open("missing.txt", 'r').read()
print({ch:content.count(ch) for ch in content})
Словарь get() метод вернет вам значение, если оно существует, или 0.
chrDict = {}
with open("gibrish.txt", 'r') as file:
for char in file.read():
chrDict[char] = chrDict.get(char, 0) + 1