2012-03-26 4 views
3

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

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

airport 
bathroom 
boss 
bottle 
elephant 

Выход:

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

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

words = {} 

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

Это домашнее задание? Что вы придумали до сих пор? –

+4

Что вы пробовали? Не могли бы вы включить код, который вы пробовали до сих пор в своем вопросе, чтобы мы могли видеть, где вам нужна дополнительная помощь? – bouteillebleu

ответ

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

+0

Я работаю над циклом for с тем, что у меня уже было, и некоторыми вещами, которые я нашел. Вы можете попытаться помочь мне исправить это, если вы не возражаете – Who8daPie

+0

@Who: Хорошо, я добавил небольшую прогулку, используя более простой метод :) –

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']}) 
Смежные вопросы