如何在循环中为函数返回值关联唯一标本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
相关产品推荐
相关产品推荐

