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

Python嵌套循环更新fruit_dict录入每行价格均值结果不符合预期求助

问题排查与修复方案

核心错误点

  • 键值对应逻辑错误:三层嵌套循环中,内层对行号j的循环会覆盖所有键的赋值,最终所有键的值都会被改成最后一行的均值,完全没有建立fruit_j和第j行均值的对应关系。
  • 可变对象引用问题:字典属于Python可变对象,直接将fruit_dict append到fruit_list时,存储的是字典的内存引用,后续修改字典会导致列表中所有已存入的字典同步更新,最终列表内全是完全相同的字典。
  • 冗余循环逻辑:外层循环遍历列数price.shape[1]属于无意义的重复操作,需求是按行计算均值,不需要遍历列维度。

修复后代码

如果你需要生成1行、5列的DataFrame,每列对应对应水果的行均值,可使用简化代码:

#!/usr/bin/python3
import numpy as np
import pandas as pd

price = np.array(range(20)).reshape(5,4)  # 5行4列示例数据
fruit_keys = [f"fruit_{i}" for i in range(5)]  # 简化键列表生成逻辑

# 直接按行生成键值对应字典
fruit_dict = {fruit_keys[j]: np.mean(price[j]) for j in range(price.shape[0])}
# 转DataFrame时套一层列表,避免自动展开为列
fruit_df = pd.DataFrame([fruit_dict])
print(fruit_df)

如果你需要保留原代码逻辑,生成4行、5列的DataFrame,每行值均为行均值,只需要每次循环创建新字典避免引用复用即可:

#!/usr/bin/python3
import numpy as np
import pandas as pd

price = np.array(range(20)).reshape(5,4)
fruit_keys = [f"fruit_{i}" for i in range(5)]
fruit_list = []

for _ in range(price.shape[1]):
    # 每次循环创建独立新字典
    fruit_dict = {fruit_keys[j]: np.mean(price[j]) for j in range(price.shape[0])}
    fruit_list.append(fruit_dict)

fruit_df = pd.DataFrame(fruit_list)
print(fruit_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:24:06