You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含非对齐时间的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)

关键细节说明

  1. 时间去重与排序:用set自动去重所有传感器的时间点,再排序保证CSV中的时间按顺序排列。
  2. 缺失值补全:用next()配合生成器表达式,高效查找对应时间的传感器数值,找不到时返回空字符串,确保每行的结构统一。
  3. CSV写入:使用csv.DictWriter可以直接将字典列表按表头映射写入,无需手动拼接每行内容,避免格式错误。

输出CSV效果

运行代码后生成的sensor_output.csv内容如下:

time,sensor1,sensor2
17:00,10,9
17:10,12,
17:20,7,11

内容的提问来源于stack exchange,提问作者Feynboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:46:08