计算嵌套字典中列表的均值
Calculate de mean of a list inside of a Nested Dictionary
我有一个嵌套字典,我在 pickle 文件中对其进行了转换。可以找到 pickle 文件 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 个模型),_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
感谢您的帮助。
你能检查一下这是否有效吗:
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)
问题是 values
是一个字符串,而不是像您尝试使用它那样的字典。 keys()
returns 字符串列表。我建议您改用 items()
从要迭代的字典中获取键值对。这也将使您避免根数据结构中的长索引语法。
我有一个嵌套字典,我在 pickle 文件中对其进行了转换。可以找到 pickle 文件 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 个模型),_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
感谢您的帮助。
你能检查一下这是否有效吗:
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)
问题是 values
是一个字符串,而不是像您尝试使用它那样的字典。 keys()
returns 字符串列表。我建议您改用 items()
从要迭代的字典中获取键值对。这也将使您避免根数据结构中的长索引语法。