row-enumerated、tab-delimited csv 文件的列表字典的键

Keys of a dictionary of lists to a row-enumerated, tab-delimited csv file

我的包含字符名称及其偏移量的词典如下所示:

{'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开始枚举角色名称作为他们的ID。

tab-delimitedcsv 文件应如下所示:

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

除了使用 fieldnames 之外,我不确定如何包含 headers IdLabel 以及如何实现行的枚举,在这里我试图应用 i = 0 并试图在最后一行的某处找到应用 i += 1 但它给了我错误警告 syntax error

有什么改进代码的想法吗?

提前致谢!

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)))

强制按字母顺序排列。