计算嵌套字典中列表的平均值
Posted
技术标签:
【中文标题】计算嵌套字典中列表的平均值【英文标题】:Calculate de mean of a list inside of a Nested Dictionary 【发布时间】:2021-12-24 06:22:36 【问题描述】:我有一个嵌套字典,我将其转换为一个泡菜文件。泡菜文件可以在here 找到。 打开pickle文件就像thar:
import pickle
resultados_acoes_testvar = pickle.load(open('map_results_modelo_acoes_variandotest.pickle', 'rb'))
该文件是一个字典,具有该结构:
'amat': 'Test_Size_100': 'raw_0': array([1.39838652e+02, 1.42292998e+02, 1.45314363e+02, 1.49162546e+02....)]
其中“amat”是数据集的名称(它在 dict 中有 9 个数据集),test_size 是我的预测长度(时间序列的预测),raw 是模型(它有 6 个模型在dict) 和 _0 是我运行的时间。我运行每个模型 10 次(0 到 9)。
我想为 test_size 和每个模型获得一个时间序列,以及我运行每个模型的 9 次的平均值。
我正在尝试这样做:
resultado =
lista_modelos = ['raw','difference', 'logaritmica', 'box_cox', 'mas', 'pct']
for acao in resultados_acoes_testvar_transformadas.keys():
resultado[acao] =
for testsize in resultados_acoes_testvar_transformadas[acao].keys():
resultado[acao][testsize] =
for values in resultados_acoes_testvar_transformadas[acao][testsize].keys():
for prefix in lista_modelos:
resultado[acao][testsize][prefix] = []
for a, b, c, d, e, f, g, h, i, j in zip(values[prefix + '_0'],values[prefix+'_1'],values[prefix+'_2'],values[prefix+'_3'],values[prefix+'_4'],values[prefix+'_5'],values[prefix+'_6'],values[prefix+'_7'],values[prefix+'_8'],values[prefix+'_9']):
mean = float((a+b+c+d+e+f+g+h+i+j)/10)
resultado[acao][testsize][prefix].append(mean)
但我遇到了一个错误:
TypeError Traceback (most recent call last)
<ipython-input-59-80ef15c9251e> in <module>
19
20
---> 21 for a, b, c, d, e, f, g, h, i, j in zip(values[prefix + '_0'],values[prefix+'_1'],values[prefix+'_2'],values[prefix+'_3'],values[prefix+'_4'],values[prefix+'_5'],values[prefix+'_6'],values[prefix+'_7'],values[prefix+'_8'],values[prefix+'_9']):
22
23 mean = float((a+b+c+d+e+f+g+h+i+j)/10)
TypeError: string indices must be integers
感谢您的帮助。
【问题讨论】:
可以分享更大的样本吗? 尝试打印变量值,它可能是一个字符串 一本很大的字典,我把下载pickle文件的链接放在了github上。 哪一行导致错误?请包含完整的错误消息。 @Code-Apprentice ,完成,对不起。 【参考方案1】:你能检查一下这是否有效:
lista_modelos = ['raw','difference', 'logaritmica', 'box_cox', 'mas', 'pct']
for acao in resultados_acoes_testvar_transformadas.keys():
resultado[acao] =
for testsize in resultados_acoes_testvar_transformadas[acao].keys():
resultado[acao][testsize] =
for values in resultados_acoes_testvar_transformadas[acao][testsize].keys():
for prefix in lista_modelos:
resultado[acao][testsize][prefix] = []
subd = resultados_acoes_testvar_transformadas[acao][testsize] # <- HERE
for a, b, c, d, e, f, g, h, i, j in zip(subd[prefix + '_0'],subd[prefix+'_1'],subd[prefix+'_2'],subd[prefix+'_3'],subd[prefix+'_4'],subd[prefix+'_5'],subd[prefix+'_6'],subd[prefix+'_7'],subd[prefix+'_8'],subd[prefix+'_9']):
mean = float((a+b+c+d+e+f+g+h+i+j)/10)
resultado[acao][testsize][prefix].append(mean)
【讨论】:
只打印模型和运行的时间(raw_0 ,raw_1....) 你检查resultado
变量吗?
对不起,我的错。我查了一下,好像是对的。非常感谢!【参考方案2】:
问题在于values
是一个字符串,而不是像您尝试使用它的字典。 keys()
返回字符串列表。我建议您改用items()
从您正在迭代的字典中获取键值对。这也可以让您避免根数据结构中的长索引语法。
【讨论】:
以上是关于计算嵌套字典中列表的平均值的主要内容,如果未能解决你的问题,请参考以下文章