python以相同的顺序将字典保存到csv

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

这是我的实际代码:

import csv

fb_catalog_dict = {
    "id":"",
    "title":"",
    "description":"",
    "availability":"",
    "condition":"",
    "price":"",
    "link":"",
    "image_link":"",
    "brand":"",
    "additional_image_link":"",
    "age_group":"",
    "color":"",
    "gender":"",
    "item_group_id":"",
    "google_product_category":"",
    "material":"",
    "pattern":"",
    "product_type":"",
    "sale_price":"",
    "sale_price_effective_date":"",
    "shipping":"",
    "shipping_weight":"",
    "size":"",
    "custom_label_0":"",
    "custom_label_1":"",
    "custom_label_2":"",
    "custom_label_3":"",
    "custom_label_4":"",
}



with open('mycsvfile.csv', 'wb') as f:  # Just use 'w' mode in 3.x
    w = csv.DictWriter(f, fb_catalog_dict.keys())
    w.writeheader()
    w.writerow(fb_catalog_dict)

我希望在csv中以相同的顺序在fb_catalog_dict中使用相同的字典,问题是python使用不同的顺序fild创建我的csv文件,我该如何解决这个问题?

python csv dictionary export-to-csv
3个回答
5
投票

在CPython> = 3.6中,这将按照书面形式工作,因为dicts are ordered now

在任何早期的Python版本(或不同的实现),您可以使用collections.OrderedDict。它正是它的名字所暗示的。

你将不得不稍微改变你的实例化,因为将dict传递给OrderedDict只是保留了dict的顺序,而不是你编写它的顺序。所以只需将它列为元组列表,as recommended here


示例代码:

import csv
from collections import OrderedDict

fb_catalog_dict = OrderedDict([
    ("id", ""),
    ("title", ""),
    ("description", ""),
    ("availability", ""),
    ...
    ])

with open('mycsvfile.csv', 'wb') as f:  # Just use 'w' mode in 3.x
    w = csv.DictWriter(f, fb_catalog_dict.keys())
    w.writerow(fb_catalog_dict)

(不确定你的header被定义为什么,所以我把它留了出来。)


1
投票

字典是无序的。并且鉴于您无论如何只使用键,您可以通过列表实现您正在做的事情。即:

fb_catalog = [
    "id",
    "title",
    "description",
]

等等..


0
投票

在Python中,dict是无序结构。 dict中没有特定的顺序。因此,我看到的唯一方法是使用字段列表,以确保始终以相同的顺序获取它们:

import csv

d = {'1':1,'2':2,'z':'z'} 

def fb_catalog_dict(fields_list,dict_object):
    return [dict_object[f] if f in dict_object else None for f in fields_list]

f = open('mycsvfile.csv', 'w',newline='')
writer = csv.writer(f)

for i in range(10):
    writer.writerow(get_values_from_dict(['z','1','2'],d))
f.close()

P.S>示例适用于Python 3.x.

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