我编写了以下代码来计算每个嵌入字典中值的总和,并且对于每个嵌入字典,我还希望保留与这些值对应的键。正如你在下面看到的,例如,我想知道20 + 30 + 40 = 90但我还想保留密钥:loan1,loan2,loan3并知道它们的值分别是20,30,40所以我可以创建一个新的字典。
我已经完成了三个for循环的写作,我认为它可以更简洁地完成。此外,我已经运行了几次,而for循环打印嵌入字典的值,而for循环记录嵌入字典的键每次都以相同的顺序迭代,我不确定是什么我有书面确保。
mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},'k2':{'loan1':90,'loan2':65, 'loan3':75}}
for k in mydict.keys():
the_sum = 0
for c in mydict[k].itervalues():
the_sum += c
print k, c, the_sum
for k2 in mydict[k].iterkeys():
print k2
k2 75 75
k2 65 140
k2 90 230
loan3
loan2
loan1
k1 40 40
k1 30 70
k1 20 90
loan3
loan2
loan1
答案 0 :(得分:2)
你只是想要它打印总和吗?或者您想将和作为字典中的新字段添加?如果您只想要给定键的总和,您可以这样做:
In [1]: mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},'k2':{'loan1':90,'loan2':65, 'loan3':75}}
In [2]: for k, v in mydict.iteritems():
...: print k, sum(v.values())
...:
...:
k2 230
k1 90
并保留所有原始信息。如果您想为每个字段添加total
,可以执行以下操作:
In [3]: for k, v in mydict.iteritems():
...: v['total'] = sum(v.values())
...:
...:
In [4]: mydict
Out[4]:
{'k1': {'loan1': 20, 'loan2': 30, 'loan3': 40, 'total': 90},
'k2': {'loan1': 90, 'loan2': 65, 'loan3': 75, 'total': 230}}
答案 1 :(得分:1)
如果您尝试将每个密钥的贷款价值相加,可以使用dict comprehension这样的代码:
mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},
'k2':{'loan1':90,'loan2':65, 'loan3':75}}
totals = {key:sum(loans.values()) for key, loans in mydict.items()}
print(totals)
产量
{'k2': 230, 'k1': 90}
如果您使用的是Python2.6或更早版本,那么您可以使用list comprehension来形成字典totals
:
totals = dict((key,sum(loans.values())) for key, loans in mydict.items())
答案 2 :(得分:1)
我不确定我完全理解你的问题。至于获取字典的总和,可以使用列表推导和sum()
替换for循环>>> mydict = {'k1':{'loan1':20,'loan2':30, 'loan3':40},'k2':{'loan1':90,'loan2':65, 'loan3':75}}
>>> sum([x for x in mydict['k1'].itervalues()])
90
>>> sum([x for x in mydict['k2'].itervalues()])
230
这确实会使mydict保持不变,因此保留了您的键/值。 python词典也是无序,如果你想保留键以便查看python的collections.ordereddict