2014-02-11 5 views
0

У меня есть следующий текст во внешнем файлетекст Python в словаре

A# 
M* 
Y% 

и хотел бы, чтобы прочитать его в словарь, чтобы он был прочитан в

Dictionary = {'A': '#', 'M': '*', 'Y': '%'} 

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

+0

Являются ли два символа на новой строке, как показывают изменения? – doctorlove

+0

@doctorlove Взгляните на исходный текст; он просто не был отступом. – poke

ответ

1

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

dictionary = {} 
with open('filename') as f: 
    for line in f: 
     dictionary[line[0]] = line[1] 
+0

Спасибо за это, я делал дубликаты глупых ошибок. – MrC

1

Вы можете сделать понимание по словарю.

with open('somefile') as file: 
    output = {line[0] : line[1] for line in file} 
2
>>> s ='''A#          
M* 
Y%''' 
>>> dict(zip(*line)[0] for line in s.splitlines()) 
{'A': '#', 'Y': '%', 'M': '*'} 

Если вы читаете из файла:

>>> with open('foo.txt') as f: 
    print dict(zip(*line.rstrip())[0] for line in f) 
...  
{'A': '#', 'Y': '%', 'M': '*'} 
1

я бы на:

with open('yourfile') as fin: 
    mydict = dict(line.rstrip() for line in fin) 

Это зависит от того, что dict принимает 2-элемент для создания пар ключ/значение, и что, удалив трей пробел от каждой линии, тогда мы должны в конечном итоге с 2-элемент.

Это имеет то преимущество, что это еще в том, что атомного исключения брошено во время строительства означает dict не будет оставаться частично заселен, и что у вас есть только для обработки одного исключения вместо IndexError с или другими, которые могут быть брошенный с использованием dict-comps/etc ...

Смежные вопросы