【问题标题】:Python: write dict to csv without changing the order of keys and values?Python:将dict写入csv而不改变键和值的顺序?
【发布时间】:2019-07-20 22:58:42
【问题描述】:

我正在尝试将 dict 写入 csv,其中第一列填充键,第二列填充值,每行只有一个键/值。

import csv
myDict = {'key1': ['apple', 'kiwi'], 'key2': ['haha','lol'], 'key3': ['meat']}


f= open('file.csv', 'w', newline='')
with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f,delimiter=',')
    for key, values in myDict.items():
        for value in values:    
            writer.writerow([key, value])

最佳输出应该是:

key1,apple
key1,kiwi
key2,haha
key2,lol
key3,meat

但是,当我运行代码时,它并不总是按照我想要的顺序写入键和值,它以随机方式将键和值写入 csv。

(背景:键和值的排序是预览编码的输出)

你能指出我在这里错过了什么吗? 提前致谢!

【问题讨论】:

  • 使用collections.OrderedDict
  • 或将 dict.keys() 转换为列表,对其进行排序并遍历排序后的列表。
  • 尝试打印字典,你会发现每次打印都不一样,写入 csv 文件时也是如此。您可以使用@Gsk 提到的内容
  • 请改用csv.DictWriter(..., fieldnames=[<list of columns>]。参数fieldnames= 定义了列的顺序。

标签: python csv sorting dictionary


【解决方案1】:

基于排序键的解决方案(不保留数据的原始结构)。不确定这是否是您要找的。​​p>

import csv

data = {'key1': ['apple', 'kiwi'], 'other_key1': ['lemon', 'kiwi'],
        'key2': ['haha', 'lol'], 'key233': ['meat'],
        'key3': ['meat']}

with open('out.csv', 'wb') as f:
    writer = csv.writer(f, delimiter=',')
    for key in sorted(data.keys()):
        for value in data[key]:
            writer.writerow([key, value])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 2022-01-10
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多