Иерархический словарь, в котором значения встроенного словаря являются списками. Как получить среднее значение каждого списка? - PullRequest
0 голосов
/ 23 января 2020

Предположим, у меня есть следующий словарь:

my_dict = {200101: {1: [350, 400, 150], 2: [350, 200, 240]}, 200102: {1: [200, 250, 100], 2: [300, 450, 400]}, 200103: {1: [200, 365, 199], 2: [200,200,200]}}

Как бы я перебрал иерархический словарь, чтобы получить среднее значение для каждого значения во встроенных словарях (которые являются списками)?

Вот результат, который я хотел бы:

{200101: {1: 300, 2: 263.33}, 200102: {1: 183.33, 2: 383.33}, 200103: {1: 254.66, 2: 200}}

Я пробовал следующий код:

import statistics
outer_dict = {}
inner_dict = {}
for st,vals in my_dict.items():
    outer_dict.update({st: inner_dict})
    for st1, vals1 in vals.items():
        inner_dict.update({st1: statistics.mean(vals1)})

И когда я звоню

outer_dict

Возвращает

{200101: {1: 254.66666666666666, 2: 200}, 200102: {1: 254.66666666666666, 2: 200}, 200103: {1: 254.66666666666666, 2: 200}}

Ответы [ 2 ]

3 голосов
/ 23 января 2020

Попробуйте сделать диктовку !

Пример:

from statistics import mean

new_dict = {i: {k: mean(i) for k, i in j.items()} for i, j in my_dict.items()}
0 голосов
/ 23 января 2020

Вы заменяете все внутренние дикты одним и тем же inner_dict объектом, поэтому это неправильно.

Рабочая версия:

for d in my_dict.values():
    for k in d:
        d[k] = statistics.mean(d[k])
...