如何将含非对齐时间的Python嵌套字典转换为CSV
解决Python嵌套字典转CSV(时间对齐补全)问题
核心思路
要处理不同传感器时间记录不全的问题,关键是先收集所有唯一时间点并排序,再为每个时间点补全所有传感器的数值(缺失值留空),最后用csv模块生成目标格式的文件。
完整代码实现
import csv # 修正后的原始数据(注意time值需为字符串,否则会触发语法错误) data = { 'sensor1': { 'units': 'x', 'values': [ {'time': '17:00', 'value': 10}, {'time': '17:10', 'value': 12}, {'time': '17:20', 'value': 7} ] }, 'sensor2': { 'units': 'x', 'values': [ {'time': '17:00', 'value': 9}, {'time': '17:20', 'value': 11} ] } } # 步骤1:收集所有唯一时间点并排序 all_times = set() for sensor_info in data.values(): for entry in sensor_info['values']: all_times.add(entry['time']) sorted_times = sorted(all_times) # 步骤2:构建目标字典列表 rows = [] for time_point in sorted_times: current_row = {'time': time_point} # 遍历每个传感器,填充对应时间的数值,无数据则留空 for sensor_name in data.keys(): # 用生成器快速匹配时间对应的value,找不到返回空字符串 target_value = next( (item['value'] for item in data[sensor_name]['values'] if item['time'] == time_point), '' ) current_row[sensor_name] = target_value rows.append(current_row) # 步骤3:写入CSV文件 header_fields = ['time'] + list(data.keys()) with open('sensor_output.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.DictWriter(csv_file, fieldnames=header_fields) writer.writeheader() writer.writerows(rows)
关键细节说明
- 时间去重与排序:用
set自动去重所有传感器的时间点,再排序保证CSV中的时间按顺序排列。 - 缺失值补全:用
next()配合生成器表达式,高效查找对应时间的传感器数值,找不到时返回空字符串,确保每行的结构统一。 - CSV写入:使用
csv.DictWriter可以直接将字典列表按表头映射写入,无需手动拼接每行内容,避免格式错误。
输出CSV效果
运行代码后生成的sensor_output.csv内容如下:
time,sensor1,sensor2 17:00,10,9 17:10,12, 17:20,7,11
内容的提问来源于stack exchange,提问作者Feynboy
相关产品推荐
相关产品推荐

