计算嵌套字典中列表的均值

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() 从要迭代的字典中获取键值对。这也将使您避免根数据结构中的长索引语法。