列表字典的键,以行枚举,制表符分隔的csv文件

问题描述 投票:1回答:1

我的字典包括字符名称和偏移量,如下所示:

{'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。

制表符分隔的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

我不知道如何包括标题IdLabel除了使用fieldnames以及如何实现行的enmuerating,在这里我尝试应用i = 0并试图找到最后一行的某处应用i += 1但它给了我错误警告syntax error

任何改进代码的想法?

提前致谢!

python csv dictionary key enumerate
1个回答
1
投票

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

强制执行字母顺序。

© www.soinside.com 2019 - 2024. All rights reserved.