2015-10-13 3 views
1

Я изучаю Python и имею некоторые проблемы сейчас. Я пытаюсь получить частоту письма с зашифрованным текстом и хочу переключить несколько букв. До сих пор так хорошоPython: Как я могу прочитать элементы

import collections 

file = open('chipertext.txt', 'r') 
text = file.read() 
print text 

lrvmnir BPR sumvbwvr JX BPR lmiwv yjeryrkbi JX qmbm Wi BPR xjvni мкд ymibrut JX irhx Wi BPR riirkvr JX

letters = collections.Counter(text) 
print letters 

Счетчик ({» ' : 18, 'r': 14, 'i': 10, 'b': 8, 'm': 7, 'j': 6, 'v': 6, 'x': 6, 'p': 4 , 'w': 4, 'k': 3, 'y': 3, 'l': 2, 'n': 2, 'u': 2, '\ n': 1, 'e': 1, 'd': 1, 'h': 1, 'q': 1, 's': 1, 't': 1})

Я не уверен, как у меня есть доступ к элементам «букв». Мне нравится получать числа букв, таких как r = letter [2], и получить счет 14

обновление: Есть ли способ итерации через элементы? Чтобы получить sometihing как:

18 
r 14 
i 10 

....

ответ

1

collections.Counter подкласс dict. Следовательно, вы можете получить доступ к элементам collections.Counter так же, как и к элементам любого обычного словаря. Пример для счета 'r', вы можете использовать - letters['r']. Пример -

>>> from collections import Counter 
>>> c = Counter({' ': 18, 'r': 14, 'i': 10, 'b': 8, 'm': 7, 'j': 6, 'v': 6, 'x': 6, 'p': 4, 'w': 4, 'k': 3, 'y': 3, 'l': 2, 'n': 2, 'u': 2, '\n': 1, 'e': 1, 'd': 1, 'h': 1, 'q': 1, 's': 1, 't': 1}) 
>>> c['r'] 
14 

Для нового требования в вопросе -

обновления: Есть также способ итерации корыта элементов?

Да, вы можете перебирать его по мере прохождения по нормальному словарю. Пример:

for key,count in letters.iteritems(): 
    print key, count 
+0

Спасибо! Это хорошо работает –

+0

Просто заметьте, вы можете просто подумать о 'Counter' как' dict' (для большинства случаев). –

Смежные вопросы