Как преобразовать файл * .tab в словарь?

#python-3.x #nltk

#python-3.x #nltk

Вопрос:

Я пытаюсь преобразовать файл * .tab в словарь. В файле 16 столбцов и 154 строки, включая заголовок. Строка заголовка и столбцы от 4 до 13 должны игнорироваться. И ключом для словаря является набор строк типа (‘tiger, cat’)

Я попробовал уже существующее решение с кодом, но оно показывает результат, который не соответствует моим ожиданиям. Вот первые несколько строк файла .tab

 Word 1  Word 2  Human (mean)    1   2   3   4   5   6   7   8   9   10  11  12  13  
love    sex 6.77    9   6   8   8   7   8   8   4   7   2   6   7   8   
tiger   cat 7.35    9   7   8   7   8   9   8.5 5   6   9   7   5   7   
tiger   tiger   10.00   10  10  10  10  10  10  10  10  10  10  10  10  10  
book    paper   7.46    8   8   7   7   8   9   7   6   7   8   9   4   9   
computer    keyboard    7.62    8   7   9   9   8   8   7   7   6   8   10  3   9   
computer    internet    7.58    8   6   9   8   8   8   7.5 7   7   7   9   5   9   
plane   car 5.77    6   6   7   5   3   6   7   6   6   6   7   3   7   
train   car 6.31    7   7.5 7.5 5   3   6   7   6   6   6   9   4   8   
telephone   communication   7.50    7   6.5 8   8   6   8   8   7   5   9   9   8   8   
 

Это код, который я использовал:

 import csv

with open('set1.tab') as set1:
    # skip the first line
    next(set1)
    list_of_dicts = list(csv.DictReader(set1, dialect='excel-tab'))
 

Ожидаемый результат должен быть: {(‘tiger’, ‘cat’) : 7.35, ….}

Но вот мой фактический результат:

 [OrderedDict([('love', 'tiger'),
              ('sex', 'cat'),
              ('6.77', '7.35'),
              ('9', '9'),
              ('6', '7'),
              ('8', '7'),
              ('7', '5'),
              ('4', '5'),
              ('2', '9'),
              ('', '')]),
 

Комментарии:

1. Что такое файл «* .tab»?

2. @UweKeim Я думаю, что это файл tsv ..?

3. * — это имя файла, а .tab — расширение. Извиняюсь, если я не понял

4. @ArupRakshit О. Извините, я этого не знал. Я вроде как новичок в Python

Ответ №1:

Это должно сделать это:

 import csv

with open('set1.tab') as set1:
    # skip the first line
    next(set1)
    rows = csv.reader(set1, dialect='excel-tab')
    dict_data = {(fields[0], fields[1]): fields[2:] for fields in rows if len(fields) >= 2}
    print(dict_data)