2012-03-26 116 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']}) 
相关问题