Как преобразовать файл * .tab в словарь? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь преобразовать файл * .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 Ответ

0 голосов
/ 15 апреля 2019

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...