这是我的实际代码:
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文件,我该如何解决这个问题?
在CPython> = 3.6中,这将按照书面形式工作,因为dict
s 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
被定义为什么,所以我把它留了出来。)
字典是无序的。并且鉴于您无论如何只使用键,您可以通过列表实现您正在做的事情。即:
fb_catalog = [
"id",
"title",
"description",
]
等等..
在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.