嵌套循环每次迭代如何存储数据?如何用DataFrame实现该需求?
解决方案
问题根因
原代码中tempStats定义在姓名遍历循环的外层,Python里字典属于可变对象,每次给allStats[name]赋值时实际存储的是同一个tempStats的内存引用,后续修改tempStats会覆盖所有之前存入allStats的对应值,最终只会保留最后一次遍历的结果。
修正后的字典实现
将tempStats的初始化移到姓名遍历循环内部,每次处理新姓名时新建独立的临时字典即可:
thisdict = { # 字典的键固定,值会动态变化 "Bob": [6,9,22,31,4], "Sam": [55,12,32,13,4], "Jeff": [53,1,52,37,4], "Tim": [5,41,2,31,4,5], "Lisa": [45,1,32,34,54,56] } allStats = {} # 存储最终结果字典 for name, numbers in thisdict.items(): tempStats = {} # 每次遍历新姓名时新建临时字典,避免引用复用 for iteration, digit in enumerate(numbers): stats = [digit+3,digit-3] # 每次迭代的统计值,可替换为自定义计算逻辑 tempStats[iteration] = stats allStats[name] = tempStats
Pandas DataFrame 实现方案(适配Excel导出需求)
以下实现会将数据整理为结构化表,可直接导出为Excel文件,格式更便于后续分析:
import pandas as pd thisdict = { "Bob": [6,9,22,31,4], "Sam": [55,12,32,13,4], "Jeff": [53,1,52,37,4], "Tim": [5,41,2,31,4,5], "Lisa": [45,1,32,34,54,56] } # 构造结构化数据行 data_rows = [] for name, numbers in thisdict.items(): for idx, digit in enumerate(numbers): data_rows.append({ "姓名": name, "数字序列索引": idx, "原始数值": digit, "加3计算结果": digit + 3, "减3计算结果": digit - 3 }) # 转为DataFrame stats_df = pd.DataFrame(data_rows) # 导出到Excel,index=False表示不导出默认行号 stats_df.to_excel("数值统计结果.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Flynn O'Connell
相关产品推荐
相关产品推荐

