Ключи словаря списков в CSV-файл с разделителями табуляции и разделением строк - PullRequest
0 голосов
/ 17 сентября 2018

Мои словари, содержащие имена персонажей и их смещения, выглядят так:

{'Amestris': [(2247, 2255)],
     'Beda': [(3266, 3270)],
     'Fuery': [(2285, 2290),
               (2380, 2385),
               (2686, 2691),
               (2723, 2728),
     'Gloria': [(1565, 1571)],
     'Hawkeye': [(22, 29),
                 (832, 839),
                 (999, 1006),
                 (1119, 1126),
                 (1927, 1934),
                 (3007, 3014),
                 (4068, 4075)]}

Мой желаемый вывод - ключи словаря (имена символов).

Кроме того, в первом столбце должны быть перечислены имена символов в качестве их идентификаторов, начиная с 0.

CSV-файл с разделителями табуляции должен выглядеть следующим образом:

Id  Label
0  Amestris
1  Beda
2  Fuery
3  Gloria
4  Hawkeye

Пока я достиг этой точки:

import csv
import pickle

exmen = pickle.load(open("exmen.p", "rb"))

with open('mycsvfile.csv', 'w') as f:
    i = 0
    fieldnames = ['Id', 'Label']
    w = csv.writer(f, delimiter=' ', fieldnames=fieldnames)
    w.writeheader()
    w.writerow(i(dict(fieldnames, (key))) for key in exmen)

Я получаю это сообщение об ошибке:

line 28, in <module>
    w = csv.writer(f, delimiter=' ', fieldnames=fieldnames)

TypeError: 'fieldnames' is an invalid keyword argument for this function

Я не уверен, как включить заголовки Id и Label, кроме использования fieldnames и как реализовать перечисление строк, здесь я попытался применить i = 0 и попытался найти где-нибудь в последняя строка для применения i += 1, но она выдала мне предупреждение об ошибке syntax error

Есть идеи по улучшению кода?

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

1 Ответ

0 голосов
/ 17 сентября 2018

fieldnames - это только аргумент для csv.DictWriter, который вам здесь не нужен. Вы могли бы попробовать что-нибудь. вдоль следующих строк, используя csv.writer:

with open('mycsvfile.csv', 'w') as f:
    w = csv.writer(f, delimiter='\t')  # tab delimited
    w.writerow(['Id', 'Label'])        # just write header row
    w.writerows(enumerate(exmen))      # write (id, key) rows

Если exmen является общим dict, порядок ключей не гарантируется. Вы можете сделать:

    w.writerows(enumerate(sorted(exmen)))

для обеспечения соблюдения алфавитного порядка.

...