python - 行枚举、制表符分隔的 csv 文件的列表字典的键

标签 python csv dictionary key enumerate

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

{'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)]}

我想要的输出是字典的键(字符名称)。

此外,第一列应该枚举角色名称作为其 Id,从 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

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

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

提前致谢!

最佳答案

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

强制按字母顺序排列。

关于python - 行枚举、制表符分隔的 csv 文件的列表字典的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368027/

相关文章:

python - 将数组索引插入转置数组

python 多进程与两个列表比较

Python CSV 阅读器 - 在一列中将每一行与另一行进行比较

c# - 在XAML中创建 "Dictionary<string, Dictionary<string, string>>"

python 具有概率的列表/字典

python - 在 python 中向嵌套字典添加新键

python - 通过 Excel 制作 CSV 在第一列名称前面给了我 ''

php - 如果每一行都有不同的模式,则加载数据本地文件

python - 排序 python 3.7+ 字典的最快方法

python - user(0)追溯(最近一次通话):