从文本fi创建词典

2024-05-19 12:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我试着从一个文本文件中创建一个字典,所以键是一个小写字符,每个值都是文件中以该字母开头的单词列表。

文本文件每行包含一个小写单词,例如:

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

Tags: 文件bottle列表字典字母line字符单词
2条回答

对于此类任务,collections模块中的defaultdict是一个不错的选择:

>>> 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']})

所以让我们来看看你的例子:

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

这看起来是个好的开始。现在你想用line做点什么。可能需要第一个字符,您可以通过line[0]访问它:

  first = line[0]

然后要检查该字母是否已在dict中。如果不在dict中,则可以添加新的空列表:

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

然后您可以将单词附加到该列表中:

  words[first].append(line)

你完了!

如果这些行已经像在示例文件中那样进行了排序,那么还可以使用^{},这要复杂一些:

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), ...)

相关问题 更多 >