Python如何检查嵌套字典键与列表匹配,按指定顺序导出CSV
实现思路
- 第一步先区分字段归属:指定字段列表里
_id、count是外层字典的公共字段,每一条account子记录都会复用这两个字段的值,剩下的字段都来自嵌套的account列表的子字典。 - 第二步双层遍历数据:先遍历外层每个字典,取出公共字段的值,再遍历对应字典下的account列表的每个子项。
- 第三步按指定顺序补全字段:逐个匹配指定字段列表的键名,公共字段直接取外层预存的值,account私有字段用
dict.get()方法取值,不存在就默认返回N/A,自动忽略字段顺序错乱的问题。 - 第四步将整理好的行批量写入CSV文件即可。
代码实现
import csv # 指定输出字段顺序 field_order = ["_id", "count", "f_name", "l_name", "number", "country"] # 原始数据(已修正示例中的语法错误) raw_data = [ { "_id": 123, "count": 345, "account": [ { "f_name": "Adam", "l_name": "Adamson", "number": 1, "country": "Argentina" }, { "l_name": "Charlson", "country": "Canada" }, { "f_name": "David", "country": "Denmark", "number": 3, "l_name": "Davidson" }, ] }, { "_id": 678, "count": 981, "account": [ { "f_name": "Edvin", "number": 4, "country": "Equador" }, ] } ] # 存储整理后的所有行 output_rows = [field_order] for outer_item in raw_data: # 先取外层公共字段的值,不存在就补N/A current_id = outer_item.get("_id", "N/A") current_count = outer_item.get("count", "N/A") # 遍历嵌套的account列表,处理每一条子记录 for account_item in outer_item.get("account", []): current_row = [] # 严格按照指定字段顺序取值 for field in field_order: if field == "_id": current_row.append(str(current_id)) elif field == "count": current_row.append(str(current_count)) else: current_row.append(str(account_item.get(field, "N/A"))) output_rows.append(current_row) # 写入CSV文件 with open("output.csv", "w", encoding="utf-8", newline="") as f: writer = csv.writer(f) writer.writerows(output_rows) # 如需打印示例中竖线分隔的预览效果,可使用下方代码 # col_width = 8 # for row in output_rows: # print("|".join(str(item).ljust(col_width) for item in row)) # print("-" * (col_width * len(field_order) + len(field_order) - 1))
内容的提问来源于stack exchange,提问作者Aviva_D
相关产品推荐
相关产品推荐

