2011-03-17 107 views
1

時檢查鑰匙我有這個任務來讀取文件,每個字符存儲在一個字典的關鍵和增量值每一個找到的關鍵,這導致了這樣的代碼:字典理解和創造

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(),但這似乎很慢,再加上如果我正確地理解了任何東西,本地人會將所有內容包括在理解範圍內,從而使事情變得更加困難。

回答

7

的Python 2.7,您可以使用Counter

from collections import Counter 

with open("gibrish.txt", 'r') as file: 
    chrDict = Counter(f.read()) 
+0

這裏的櫃檯回遷到Python 2.5返回你的價值:http://code.activestate.com/recipes/576611-counter-class/ – 2011-03-17 09:40:27

+0

櫃檯好像一個非常好的選擇。謝謝! – Guu 2011-03-17 09:59:01

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

詞典get()me的ThOD是怎麼回事,如果它存在,否則爲0。

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