好吧我正在尝试从文本文件创建字典,因此键是一个小写字符,每个值都是文件中以该字母开头的单词列表。
文本文件每行包含一个小写字,例如:
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 :(得分:2)
让我们来看看你的例子:
words = {}
for line in infile:
line = line.strip()
这对于一个开始看起来不错。现在你想对line
做点什么。可能你需要第一个角色,你可以通过line[0]
访问:
first = line[0]
然后你要检查这封信是否已经在dict中。如果没有,您可以添加一个新的空列表:
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), ...)
答案 1 :(得分:1)
defaultdict
模块的 collections
是这类任务的不错选择:
>>> 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']})