2014-09-04 2 views
1

У меня есть два файла с ключом и значением. Я пытаюсь объединить их с соответствующими key и value. Ключи присутствуют в обоих файлах и value1 в file1 и value2 в file2. Файлы имеют много столбцов и key в обоих файлах в col[0] col[1]Merge Dict Значение ключа

Я пытаюсь получить что-то вроде этого:

key value1 value2 

Код:

from collections import defaultdict 

d2 = {} 

with open('file2.txt', 'r') as file2: 
    for row in file2: 
     cols = row.strip().split() 
     #print(cols); 
     key = cols[0], cols[1] 
     value1 = cols[4] 
with open('file1.txt', 'r') as file1: 
    for row in file1: 
     cols = row.strip().split() 
     #print(cols); 
     key = cols[0], cols[1] 
     value2 = cols[2] 

     print ("%s %s %s %s\n" % (d2[cols[0]], d2[cols[1]], d2[cols[4]], d2[cols[2]])) 

Error: 

Traceback (most recent call last): 
    File "test_two.py", line 21, in <module> 
    print ("%s %s %s %s\n" % (d2[cols[0]], d2[cols[1]], d2[cols[4]], d2[cols[2]])) 
KeyError: '3545' (first line) 
+1

Это должно быть 'd.items()'. –

+1

Я использую Python 2.7, поэтому я использовал 'd.iteritems()', и это дает ошибку. – 2014-09-04 14:14:11

+1

Ой! Это должно быть 'для строки в d'. Но так как ваш файл содержит только 3 столбца, вы получите 'IndexError' на' value2 = cols [4] '. –

ответ

2
for d in (file1,file2): 

Здесь f является один ваших файлов.

for key, value in d: 

Если перебирать файл, вы получите линии (строки). Когда вы перебираете строку (строку), вы получаете символов. Итак, если все строки в ваших файлах не имеют двух символов, for key, value in d не удастся.

Остальная часть вашего кода (cols = row.strip().split()) кажется правильной, хотя, неясно, откуда берется row. Как сказал Ашвини Чаудхари, вы, вероятно, хотели for row in d

+0

Я изменил код. В предыдущем коде не было видно, что 'col [4]' следует взять из файла. – 2014-09-04 15:42:46

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