我有一个词典列表:
[ defaultdict(<class 'dict'>,
{ 'account_id': '',
'address': { 'address_country': 'ZM',
'city': 'North Matthewland',
'state': 'Nevada',
'street_name': 'Cabrera Extensions',
'street_number': 197,
'zip_code': '81431'},
'affiliate_id': 12,
'brand': 'TTT',
'country': 'ZM',
'email': 'rosariojohn@TTT.zed',
'first_name': 'Peter',
'last_name': 'Green',
'leadsource': 559,
'password': 'test385',
'phone_number': '052839601'},)]
在我的情况下,我需要将所有这些数据都放到CSV文件中,所以通过csv模块,我尝试将所有这些数据写入CSV文件但我每次都收到 错误讯息:
ValueError: dict contains fields not in fieldnames: 'address'
所以我添加到&#39;字段名称&#39;地址,但问题是我收到一列地址中的所有数据。
with open('test_file.csv', 'w') as csvfile:
filed_names = ['first_name',
'last_name',
'email',
'phone_number',
'password',
'country',
'leadsource',
'affiliate_id',
'account_id',
'brand',
'street_number',
'street_name',
'city',
'state',
'address_country',
'zip_code',
]
writer = csv.DictWriter(csvfile, fieldnames=filed_names)
writer.writeheader()
writer.writerows(list_user_details)
答案 0 :(得分:1)
你需要将结构展平,因此它只是一个包含字符串和数字的字典列表,而不是一个包含字符串和数字字典的字典列表。
假设您不想仅为编写步骤修改此列表,请创建一个新的空列表。将字典从一个列表复制到另一个列表,但将address
字典转换为一组名为address.address_country
,address.city
,address.state
的其他字段,依此类推。
然后使用csv
写出这个新列表,并将修改后的字段名传递给它。
另外,不要忘记在字段字符串中使用逗号进行测试。
答案 1 :(得分:0)
Pandas提供了一个方便的选择:
# first flatten address
for d in lst:
d.update(d['address'])
del d['address']
# read into dataframe
df = pd.DataFrame(d, index=range(len(lst)))
# output to csv
df.to_csv('file.csv', index=False)
# Result
# account_id address_country affiliate_id brand city country \
# 0 ZM 12 TTT North Matthewland ZM
# email first_name last_name leadsource password phone_number \
# 0 rosariojohn@TTT.zed Peter Green 559 test385 052839601
# state street_name street_number zip_code
# 0 Nevada Cabrera Extensions 197 81431