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

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

【讨论】:

以上是关于计算嵌套字典中列表的平均值的主要内容,如果未能解决你的问题,请参考以下文章

计算python中列表值的95个百分点[重复]

如何利用字典计算数据框中的多个平均值

通过平均向量来展平嵌套列表

我们如何访问以列表形式存在的字典中的值? [复制]

根据列表中的两个元素计算列表列表的平均值?

计算元组列表中数值的平均值