2016-11-18 39 views
0

例如,讓我們說我們有一個.txt文件名爲字母包含,創建字典出的文本文件的

a 
b 
b 
c 
d 
d 
d 
d 

我將如何去建立一個字典,其中鍵是單個字母在文件中找到,值是每個字母出現的次數?例如,a將是一個鍵,相應的值爲1,而b也是一個鍵,其值爲2.

我們剛開始學習打開文件和創建詞典,所以我會假設我會從某些東西開始像,

file = open('letters.txt', 'rt') 

我不太清楚,如果RT部分是正確的,但我們將不得不尋找「文件」,因此,

for letter in file: 

但我不太清楚如何搜索對於字母,使它們成爲鍵,然後將該字母出現的次數添加到該值在字典中。有什麼建議?

+0

一件事入手:嘗試在不同的階段打印出的變量,或者叫'type'或'help'在他們的附加信息。如果你知道'對於文件中的X':'只是檢查'X'是什麼,我相信你可以通過實驗推斷出你需要做什麼。 –

回答

1

的Python有collections模塊調用Counter便利擴展到dict那正是你正在尋找它:

>>> from collections import Counter 
>>> with open('letters.txt') as f: 
...  c = Counter(map(str.strip, f)) 
>>> c 
Counter({'a': 1, 'b': 2, 'c': 1, 'd': 4}) 

如果你真的想把它當作一個dict

>>> dict(c) 
{'a': 1, 'b': 2, 'c': 1, 'd': 4} 
+1

'Counter'已經是'dict'(I.E.' isinstance(c,dict) - > True'),所以轉換它只是爲了打印目的。 –

+3

雖然'Counter'是一個'dict',它具有不同的行爲'c ['e']'返回'0',而'dict(c)['e']'是一個'KeyError'。所以我不完全同意這只是爲了展示,它可能取決於行爲的期望。 – AChampion

1

如果這是一個實際問題,你應該可以做類似的事情:

from collections import Counter 
counts = Counter([ln.strip() for ln in open('letters.txt')]) 

甚至

counts = Counter(open('letters.txt').read()) 

(這也將計數換行符)。

正如你顯然做一個學習的過程,你可能尋找的東西,如:

counts = dict() 
for line in open('letters.txt'): 
    letter = line[0] 
    counts[letter] = counts.get(letter, 0) + 1