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

如何在循环中为函数返回值关联唯一标本ID?

解决方法

首先,别用eval,这东西既不安全又容易引发意料之外的问题。直接用字典来关联标本ID和对应的数据就够了,简单还靠谱。

修改后的代码片段

import process_data  # 修正原代码的import语法错误(原写法少了下划线)
import rafu
import pandas as pd

specimen_ids = [spec_1, spec_2, spec_3]
directory = 'some_folder'
cycle_rise_values = [1,2,3]
cycle_fall_values = [3,2,1]
stage_type = 'cycling'
target_growths = [0.1,0.2,0.3]

# 初始化两个字典,用来存储每个标本的计算结果
delta_k_results = {}
crack_length_results = {}

# 直接遍历标本ID,比用range(len())更清晰
for specimen_id in specimen_ids:
    dcpd_df = rafu.dcpd_data_input(directory, specimen_id)
    
    if dcpd_df is not None:
        specimen_df_csv, summary_df, delta_k_values, crack_length_values = process_data.main(
            dcpd_df, cycle_rise_values, cycle_fall_values, stage_type, target_growths
        )
        
        # 保存文件(用f-string拼接路径更简洁)
        specimen_df_csv.to_csv(f"{directory}\\{specimen_id}.csv")
        summary_df.to_csv(f"{directory}\\{specimen_id} Summary.csv", index=False)
        
        # 将结果与标本ID关联存入字典
        delta_k_results[specimen_id] = delta_k_values
        crack_length_results[specimen_id] = crack_length_values

# 后续统计示例:计算所有标本delta_k的平均值(假设每个delta_k_values是Series/DataFrame)
all_delta_k = pd.concat(delta_k_results.values())
average_delta_k = all_delta_k.mean()
print(f"所有标本的delta_k平均值: {average_delta_k}")

# 按ID快速获取单个标本的结果
print(f"标本{spec_1}的裂纹长度数据: {crack_length_results[spec_1]}")

关键说明

  • 用字典存储结果,键为标本ID,值为对应的计算数据,彻底解决覆盖问题,还能通过ID快速定位数据。
  • 遍历标本ID时直接迭代列表元素,避免索引操作带来的错误,代码可读性更高。
  • 后续计算时,直接从字典中取出所有值即可完成统计分析,灵活度拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:02:21