2013-05-15 3 views
-2

file.txtсписки в словарь питона

Harry Moon, Meteor \n roger gim, astronaut \n john banks, westpac \n john banks, ASB 

Код:

FILE=file.txt 
filename=open(FILE,"rt") 
fileread=filename.readlines() 
fileread.sort() 
for i in fileread: 
    dict={} 
    dict[i.split(',')[0]]=i.split(',')[1] 
    print dict 

При том, что я был в состоянии получить следующее:

{'Harry Moon': ' Meteor\n'} 
{'john banks': ' ASB'} 
{'john banks': ' westpac\n'} 
{'roger gim': ' astronaut\n'} 

Однако , я хочу это:

{ 'Harry Moon': ' Meteor' 
    , 'john banks': ' ASB' 
    , 'john banks': ' westpac' 
    , 'roger gim': 'astronaut' } 
+2

Вы не можете получить то, что вы хотите, потому что ваш пример имеет два 'ключи джон banks', и что Безразлично Не работай. Будет что-то вроде '' john banks ': [' ASB ',' westpac '] 'вместо этого, т. Е. Использовать список в качестве значения? – DSM

+0

О, но он должен работать, потому что меня попросили превратить файл со многими дублирующими ключами с разными значениями в словарь. Итак, я надеялся разделить ключи и значения, узнав разделитель, в данном случае «,» и планируя превратить этот разреженный список в dict, чтобы я мог вызвать любой ключ, чтобы получить их значение, и даже если у них есть дубликаты, n дубликатов ключ не должен показывать, просто значение. – rendy

+0

тип 'd = {'john banks': 'ASB', 'john banks': 'westpac'}' на консоли Python. Затем 'print d'. – DSM

ответ

1
dict([line.strip().split(',') for line in open(FILE).readlines()]) 
+0

Ударьте мне: D Хороший краткий ответ. – b10hazard

+0

+1 для сжатого подхода – Schorsch

+0

На самом деле это может быть более уплотненным. Вызов для чтения строк не требовался, поскольку файловые объекты уже являются итерабельными и выводят строки, когда вы перебираете их. –

0

Попробуйте это ....

file_str = open(FILE).read() 

d = {} 
for line in file_str.splitlines(): 
    d[line.split(',')[0]] = line.split(',')[1] 

print d 

Там же Джон Смит Optionals ответ, на самом деле лаконичный код.

1

Dont использовать «Dict» в качестве имени переменной, а также использовать with при открытии файлов:

with open('file.txt') as f: 
    result = dict(line.strip().split(',') for line in f) 
+0

Я попробую это, спасибо, elyase, я снова поплю, если каким-то образом я не смогу организовать сценарий. ура – rendy

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