将字典值传入SciPy单因素ANOVA时出现长度错误
问题
尝试将字典的值传入SciPy的f_oneway函数时,收到错误提示“input is too short (must be greater than 1)”,但字典值的长度为3,理论上符合要求。已知可以通过键逐个传入值(用逗号分隔),但希望代码能适配未知键数量/字典长度的场景,请问是否有特定处理方式,或是实现思路完全错误?
代码及运行结果
x = {'a' : [1,2,3], 'b' : [4,5,6], 'c' : [7,8,9]} for a in x.values(): print(a) len(x.values())
运行输出:
[1, 2, 3] [4, 5, 6] [7, 8, 9] 3
执行stats.f_oneway(x.values())时触发错误:
TypeError: at least two inputs are required; got 1.
解决方案
问题核心是x.values()返回的是一个字典视图对象,而stats.f_oneway需要接收多个独立的数组参数,而非单个包含多数组的可迭代对象。
要适配任意数量的字典值,只需使用Python的解包运算符*,将字典值的可迭代对象拆分为独立参数传入函数:
from scipy import stats x = {'a' : [1,2,3], 'b' : [4,5,6], 'c' : [7,8,9]} # 用*解包字典值为独立参数 result = stats.f_oneway(*x.values()) print(result)
执行后会得到正确的方差分析结果:
F_onewayResult(statistic=150.0, pvalue=2.467332583299388e-06)
这种写法无需关心字典的键数量,会自动将每个值作为单独参数传递给f_oneway,完美适配未知长度的场景。
内容的提问来源于stack exchange,提问作者Cameron Kranz
相关产品推荐
相关产品推荐

