2015-10-13 64 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無線 BPR xjvni MKD ymibrut JX irhx無線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' 'd':1,'h':1,'q':1,'s':1,'t':1})

我不確定我如何訪問「字母」的元素。我喜歡得到像r = letter [2]這樣的字母的數字,並得到計數14

更新: 是否還有一種方法來遍歷元素?要獲得sometihing像:

18 
r 14 
i 10 

....

回答

1

collections.Counterdict一個子類。因此,您可以訪問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'(對於大多數情況)。 –