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

如何在处理CSV文件时跳过城市和日期与上一行重复的行?

解决方案:CSV数据按州分组并跳过连续重复行

针对你的需求,我整理了完整的实现代码,既实现了按州名作为键构建字典、将城市和日期存入对应列表的功能,又能自动跳过和上一行完全重复的记录:

import csv

def read_file(fp):
    # 初始化存储结果的字典:键为州名,值为(城市, 日期)的列表
    state_data = {}
    # 用来保存上一行的城市和日期,初始设为None
    prev_city_date = None
    
    reader = csv.reader(fp)
    # 跳过表头行
    next(reader)
    
    for row in reader:
        # 解析当前行的州、城市、日期
        state, city, date = row
        current_city_date = (city, date)
        
        # 判断当前行是否和上一行完全重复,重复则跳过
        if current_city_date == prev_city_date:
            continue
        
        # 如果州不在字典里,先初始化对应的空列表
        if state not in state_data:
            state_data[state] = []
        # 将当前的城市和日期添加到对应州的列表中
        state_data[state].append(current_city_date)
        
        # 更新上一行的记录为当前行
        prev_city_date = current_city_date
    
    return state_data

# 测试示例(假设你的CSV文件名为data.csv)
if __name__ == "__main__":
    with open("data.csv", "r") as fp:
        result = read_file(fp)
        print(result)

代码逻辑拆解:

  • 字典初始化:state_data用来存储最终结果,键是州名,值是包含(城市, 日期)元组的列表
  • 重复行过滤:用prev_city_date保存上一行的城市和日期组合,每次遍历新行时对比,完全一致就直接跳过当前行
  • 数据分组存储:遍历每行时,先检查州是否已在字典中,没有则创建空列表,再把当前的城市和日期组合添加进去
  • 表头处理:用next(reader)跳过第一行的表头数据

用你提供的测试CSV数据运行后,输出结果会是:

{'Michigan': [('Detroit', '3/31/00'), ('Detroit', '4/1/00'), ('Detroit', '4/2/00')]}

完美去掉了连续重复的两行Detroit 3/31/00。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:40:01