2012-03-26 114 views
3

好吧,好吧,我想創建一個文本文件中的字典所以關鍵是一個小寫字母以及每個值是從文件以該字母開頭的單詞列表的字典。創建一個從文本文件

的文本文件containts每行如一個小寫字:

airport 
bathroom 
boss 
bottle 
elephant 

輸出:

words = {'a': ['airport'], 'b': ['bathroom', 'boss', 'bottle'], 'e':['elephant']} 

還沒有得到很多做真的,只是困惑我怎麼會從每行得到的第一個指數,將其設置爲密鑰並附加值。如果有人可以幫我開小車,我真的會相當滿意。

words = {} 

for line in infile: 
    line = line.strip() # not sure if this line is correct 
+0

這功課嗎?到目前爲止,你有什麼想法? – 2012-03-26 23:42:25

+4

到目前爲止您嘗試過什麼?你能否在你的問題中包括你已經嘗試過的代碼,以便我們能夠看到你需要更多幫助的地方? – bouteillebleu 2012-03-26 23:42:46

回答

2

因此,讓我們來看看你的例子:

words = {} 
for line in infile: 
    line = line.strip() 

這看起來很好的一個開端。現在你想用line做點什麼。也許你需要的第一個字符,您可以通過訪問line[0]

first = line[0] 

那麼你一定要檢查郵件是否已經在字典。如果沒有,你可以添加一個新的空單:

if first not in words: 
    words[first] = [] 

然後您可以將單詞添加到列表:

words[first].append(line) 

大功告成!

如果線條在您的示例文件已經排序一樣,你也可以利用itertools.groupby,這是一個比較複雜的:

from itertools import groupby 
from operator import itemgetter 

with open('infile.txt', 'r') as f: 
    words = { k:map(str.strip, g) for k, g in groupby(f, key=itemgetter(0)) } 

您也可以在線路首排序,這使得該方法普遍適用:

groupby(sorted(f), ...) 
+0

謝謝你的迴應,但我很不熟悉這種方法,因爲我們還沒有學到它。所以我不確定我是否可以使用它。 – Who8daPie 2012-03-27 00:14:20

+0

我正在做一個for循環與我已經有的東西和我發現的一些東西。你可以試試幫我解決這個問題,如果你不介意 – Who8daPie 2012-03-27 00:16:20

+0

@Who:好吧,我用一個簡單的方法:) – 2012-03-27 00:20:37

1

defaultdictcollections模塊是用於這些種任務的一個不錯的選擇:

>>> import collections 
>>> words = collections.defaultdict(list) 
>>> with open('/tmp/spam.txt') as f: 
... lines = [l.strip() for l in f if l.strip()] 
... 
>>> lines 
['airport', 'bathroom', 'boss', 'bottle', 'elephant'] 
>>> for word in lines: 
... words[word[0]].append(word) 
... 
>>> print words 
defaultdict(<type 'list'>, {'a': ['airport'], 'b': ['bathroom', 'boss', 'bottle'], 'e': ['elephant']}) 
相關問題