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

如何利用字典列表,根据文本/CSV文件数据动态更新对应字典?

嘿,我完全懂你遇到的麻烦——随着合作诊所数量蹭蹭涨,那串if-elif链肯定会变得又长又乱,维护起来简直头疼。咱们换个更灵活、更易扩展的思路来解决这个问题!

核心思路:用字典映射替代条件判断链

与其写一堆if clinic_code == XXX,不如直接把诊所代码和对应的目标字典绑定成一个映射字典。这样你不用提前知道每个字典的名字,只要拿到诊所代码,就能直接找到要更新的字典,完全动态化。

先给你举个具体的实现例子,对照你原来的场景来改:

原来的臃肿写法(反面教材)

# 一堆零散的诊所字典
clinic_x_data = {"total_cases": 0, "test_types": []}
clinic_y_data = {"total_cases": 0, "test_types": []}
clinic_z_data = {"total_cases": 0, "test_types": []}
# ... 新增诊所就得再加一行字典定义

# CSV处理逻辑里的长长条件链
import csv
with open('lab_records.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)  # 跳过表头
    for row in reader:
        clinic_code = row[2]
        if clinic_code == "CLINIC_X":
            clinic_x_data["total_cases"] += 1
            clinic_x_data["test_types"].append(row[4])
        elif clinic_code == "CLINIC_Y":
            clinic_y_data["total_cases"] += 1
            clinic_y_data["test_types"].append(row[4])
        elif clinic_code == "CLINIC_Z":
            clinic_z_data["total_cases"] += 1
            clinic_z_data["test_types"].append(row[4])
        # ... 每加一个诊所就得加一个elif

改进后的优雅写法

import csv

# 把所有诊所字典统一放到一个映射表里
clinic_dict_mapping = {
    "CLINIC_X": {"total_cases": 0, "test_types": []},
    "CLINIC_Y": {"total_cases": 0, "test_types": []},
    "CLINIC_Z": {"total_cases": 0, "test_types": []},
    # 新增诊所?直接在这里加一行键值对就行,不用碰下面的逻辑!
}

with open('lab_records.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)
    for row in reader:
        clinic_code = row[2]
        # 动态找到对应的字典,不用写判断!
        if clinic_code in clinic_dict_mapping:
            target_dict = clinic_dict_mapping[clinic_code]
            target_dict["total_cases"] += 1
            target_dict["test_types"].append(row[4])
        else:
            # 可选:处理未知诊所代码的情况,比如打日志提醒
            print(f"警告:发现未注册的诊所代码 {clinic_code}")

进阶:如果不同诊所的更新逻辑不一样怎么办?

要是有的诊所需要特殊处理(比如累加数值不是1,或者要记录不同的字段),可以把映射表里的值改成「更新函数+字典」的组合,让逻辑更灵活:

# 定义不同诊所的更新逻辑函数
def update_clinic_x(row, target_dict):
    target_dict["total_cases"] += 1
    target_dict["blood_tests"].append(row[4])

def update_clinic_y(row, target_dict):
    # Y诊所需要累加样本数量,不是计数
    target_dict["total_samples"] += int(row[5])
    target_dict["urine_tests"].append(row[6])

# 映射表现在绑定代码到「函数+字典」
clinic_logic_mapping = {
    "CLINIC_X": (update_clinic_x, {"total_cases": 0, "blood_tests": []}),
    "CLINIC_Y": (update_clinic_y, {"total_samples": 0, "urine_tests": []}),
}

with open('lab_records.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)
    for row in reader:
        clinic_code = row[2]
        if clinic_code in clinic_logic_mapping:
            update_func, target_dict = clinic_logic_mapping[clinic_code]
            update_func(row, target_dict)

这种方式下,每个诊所的更新逻辑可以独立维护,新增诊所只需要加一个函数和一行映射,完全不影响原有代码。

为什么这个方案更好?

  • 扩展性拉满:新增诊所只需要修改映射表,不用动循环逻辑
  • 可读性更高:一眼就能看到所有诊所和对应的数据/逻辑
  • 彻底摆脱条件链:再也不用面对几十行的if-elif了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:12:05