Python:对嵌套字典中不同字典中嵌套的值求和

Python:对嵌套字典中不同字典中嵌套的值求和,python,dictionary,nested,Python,Dictionary,Nested,我有一个嵌套字典,名为“high_low_teams_in_profile”,如下所示: { m_profile1: { team_size1: { low: 1, high: 1 }, team_size2: {

我有一个嵌套字典,名为“high_low_teams_in_profile”,如下所示:

{   
    m_profile1:
        {
            team_size1:
                {   
                    low: 1,

                    high: 1

                },
            team_size2:
                {   
                    low: 1,

                    high: 1

                }
        },
    m_profile2:
        {
            team_size1:
                {   
                    low: 1,

                    high: 1

                },
            team_size2:
                {   
                    low: 1,

                    high: 1

                }

        }   
}
我想得到{m_profile1:4,m_profile2:4}

在python中,最有说服力的方法是什么? 现在我有以下几点:

new_num_teams_in_profile = {}
for profile in high_low_teams_in_profile:
    new_num_teams_in_profile[profile]= dict((team_size, sum(high_low_teams_in_profile[profile][team_size].values())) for team_size in high_low_teams_in_profile[profile])

new_num_teams_in_profile= dict((profile, sum(new_num_teams_in_profile[profile].values())) for profile in new_num_teams_in_profile)

虽然这可能不是最具python风格的代码,但以下代码应该可以工作,并且比原始版本更具可读性。注意
iteritems()
方法,它允许访问dict的键和值,而
itervalues()
,顾名思义,它只迭代dict的值

final = {}
for key, sizes in high_low_teams_in_profile.iteritems():
    total = 0
    for value in sizes.itervalues():
        s = sum(value.itervalues())
        total += s

    final[key] = total

print final
此外,您可以使用以下命令。虽然这是一个较短的行数,它是稍微更难阅读

final = {}
for key, sizes in high_low_teams_in_profile.iteritems():
    total = sum([sum(value.itervalues()) for value in sizes.itervalues()])
    final[key] = total

print final

我不确定我是否会说它是最具蟒蛇风格的,但它是最:

sum
的参数是a,而p}中prof的外部
{prof:sum(…)是a。

太好了!我喜欢这一个=)简洁明了!
p = high_low_teams_in_profile
{ prof:sum(p[prof][team][hl]
           for team in p[prof]
           for hl in p[prof][team])
  for prof in p}