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

嵌套循环每次迭代如何存储数据?如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 09:42:02