【发布时间】:2020-01-31 10:32:03
【问题描述】:
我有一个字典列表,需要将它们保存为 CSV。第一行是标题列表字段名称。
字段顺序应与标题中的相同。问题是某些字段是可选的,而某些 dicts 不包含它们。另一个问题是 python 不会按照定义的顺序迭代 dict 键。
import csv
import sys
fields = ['first_name', 'last_name', 'city']
dicts = [
{
"first_name": "John",
"last_name": "Doe",
"city": "New York",
},
{
"first_name": "Agent",
"last_name": "Smith",
"city": "Matrix",
},
]
csv_writer = csv.writer(sys.stdout)
csv_writer.writerow(fields)
for obj in dicts:
# fields order mismatch
csv_writer.writerow(obj.values())
这会产生与标题不匹配的 CSV 行。
first_name, last_name, city
New York, John, Doe
Matrix, Agent, Smith
我可以手动对字段进行排序并检查缺失的项目,但我想知道是否有更好的解决方案可以按预定义的顺序将 dict 值输出到 CSV?
【问题讨论】:
-
您使用的是哪个 Python 版本?这似乎是由于字典在 3.6 之前的 Python 版本上不保留键顺序。
-
换行即可:
csv_writer.writerow([ obj[key] for key in fields ]) -
使用python 2.7
-
@aminrd,这不会解决问题,因为使用的 Python 版本不保留字典键顺序。 alex2007v 发布了正确答案。
-
@accdias 这就是为什么我正在阅读来自
fields列表的订单!