代码之家  ›  专栏  ›  技术社区  ›  Julian Medic

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

  •  2
  • Julian Medic  · 技术社区  · 8 年前

    这是我的实际代码:

    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\U catalog\U dict一样,问题是python使用不同的顺序文件创建我的csv文件,我如何解决这个问题?

    3 回复  |  直到 8 年前
        1
  •  7
  •   Graipher    8 年前

    在CPython中>=3.6这将按书面规定进行,因为 dict s are ordered now .

    在任何早期Python版本(或不同的实现)上,都可以使用 collections.OrderedDict . 它完全按照它的名字来做。

    您必须稍微更改实例化,因为传递 字典 OrderedDict 只是保持了 字典 ,但不是你写它的顺序。所以只要把它列成一个元组列表, 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 被定义为,所以我省略了。)

        2
  •  1
  •   JSharm    8 年前

    字典是无序的。如果你只使用这些键,你所做的事情可以通过一个列表来实现。ie:

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

        3
  •  0
  •   machine_learner    8 年前

    在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个