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