2014-10-31 3 views
0

Итак, скажем, я хочу преобразовать следующее в словарь, где 1-й столбец - это ключи, а второй столбец - значения.Преобразование текстового файла в словарь в python

http://pastebin.com/29bXkYhd

Следующий код работает для этого (предположим, что romEdges.txt это имя файла):

f = open('romEdges.txt') 

dic = {} 

for l in f: 

    k, v = l.split() 

    if k in dic: 

     dic[k].extend(v) 

    else: 

     dic[k] = [v] 

f.close() 

OK

Но почему не код работать для этого файл?

http://pastebin.com/Za0McsAM

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

Заранее спасибо.

ответ

2

Вы должны использовать append вместо extend

from collections import defaultdict 

d = defaultdict(list) 

with open("romEdges.txt") as fin: 
    for line in fin: 
     k, v = line.strip().split() 
     d[k].append(v) 
print d 

или с помощью наборов для предотвращения дубликатов

d = defaultdict(set) 

with open("romEdges.txt") as fin: 
    for line in fin: 
     k, v = line.strip().split() 
     d[k].add(v) 
print d 
+0

Только теперь у меня проблема, что ключ имеет несколько одинаковых значений – CyanogenCX

+0

Если заказ не важен, вы можете использовать наборы для значений –

+0

Нет, порядок не важен, я думаю. Я буду выполнять поиск по единой стоимости, используя данные из словаря. Не могли бы вы показать мне, как преобразовать данные в набор, а затем, возможно, вернуться к списку? Или это не имеет значения? Как я могу использовать тот же алгоритм с наборами и списками? – CyanogenCX

-1

Если вы хотите добавить данные в словаре, то вы можете использовать обновление в питона , Пожалуйста, используйте следующий код:

f = open('your file name') 

dic = {} 

for l in f: 

    k,v = l.split() 

    if k in dic: 

     dict.update({k:v }) 

    else: 

     dic[k] = [v] 

печати DIC f.close()

выход:

{'0100464': ['0100360'], '0100317': ['0100039'], '0100405': ['0100181'], '0100545': ['0100212'], '0100008': ['0000459'], '0100073': ['0100072'], '0100044': ['0100426'], '0100062': ['0100033'], '0100061': ['0000461'], '0100066': ['0100067'], '0100067': ['0100164'], '0100064': ['0100353'], '0100080': ['0100468'], '0100566': ['0100356'], '0100048': ['0100066'], '0100005': ['0100448'], '0100007': ['0100008'], '0100318': ['0100319'], '0100045': ['0100046'], '0100238': ['0100150'], '0100040': ['0100244'], '0100024': ['0100394'], '0100025': ['0100026'], '0100022': ['0100419'], '0100009': ['0100010'], '0100020': ['0100021'], '0100313': ['0100350'], '0100297': ['0100381'], '0100490': ['0100484'], '0100049': ['0100336'], '0100075': ['0100076'], '0100074': ['0100075'], '0100077': ['0000195'], '0100071': ['0100072'], '0100265': ['0000202'], '0100266': ['0000201'], '0100035': ['0100226'], '0100079': ['0100348'], '0100050': ['0100058'], '0100017': ['0100369'], '0100030': ['0100465'], '0100033': ['0100322'], '0100058': ['0100056'], '0100013': ['0100326'], '0100036': ['0100463'], '0100321': ['0100320'], '0100323': ['0100503'], '0100003': ['0100004'], '0100056': ['0100489'], '0100055': ['0100033'], '0100053': ['0100495'], '0100286': ['0100461'], '0100285': ['0100196'], '0100482': ['0100483']} 
Смежные вопросы