Создать словарь из текстового файла - PullRequest
3 голосов
/ 27 марта 2012

Хорошо, я пытаюсь создать словарь из текстового файла, чтобы ключ представлял собой один символ в нижнем регистре, а каждое значение - это список слов из файла, которые начинаются с этой буквы.

Текстовый файл содержит одно строчное слово на строку, например:

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

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Итак, давайте рассмотрим ваш пример:

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), ...)
1 голос
/ 27 марта 2012

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