Banking_Deposits = {'January':[15000,9800,10100], 'Feburary':[2500,1400,14100], 'March': [20000,78366]}
total_dep = sum(Banking_Deposits.values())
我想获得这三个月全部存款的总和。但是,我返回此错误:
TypeError: unsupported operand type(s) for +: 'int' and 'list'
答案 0 :(得分:3)
目前sum()
并没有遍历字典中的每个存款,而是遍历了Banking_Deposits.values()
内部的每个列表。由于sum的初始值设定项为0(即int),因此在sum尝试将每个列表添加到0时会遇到错误。一种解决方案是先对列表进行展平,然后再取和:
sum(val for value in Banking_Deposits.values() for val in value)
答案 1 :(得分:3)
更直观的方法是进行嵌套总和:
sum(sum(x) for x in Banking_Deposits.values())
您还可以使用sum
's start
参数首先加入列表:
sum(sum(Banking_Deposits.values(), []))
start
的默认值为0,这就是为什么出现错误:0 + [...]
不计算的原因。更不用说您的原始总和会产生一个很长的列表而不是一个数字,因为那是您将列表加在一起后得到的。
链接列表的更好方法是使用itertools.chain.from_iterable
,它不会将多个列表分配为副产品:
sum(chain.from_iterable(Banking_Deposits.values()))
@Primusa's answer建议使用一种等效且更直观的方法来展平我强烈建议的值。
答案 2 :(得分:2)
只需遍历字典,通过分配键来获取其值,然后对其求和。像这样:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://aframe.io/releases/0.8.0/aframe.min.js"></script>
</head>
<body>
<a-scene screenshot="width: 640; height: 320">
<a-entity id="box" geometry="primitive: box; width: 1; depth: 1; height: 1" position="-1 0.5 -3" rotation="0 45 0" material="color: #4CC3D9"></a-entity>
<a-entity id="sphere" geometry="primitive: sphere; radius: 1.25" material="color: #EF2D5E" position="0 1.25 -5"></a-entity>
<a-entity id="cylinder" geometry="primitive: cylinder; radius: 0.5; height: 1.5" position="1 0.75 -3" material="color: #FFC65D"></a-entity>
<a-entity id="plane" position="0 0 -4" rotation="-90 0 0" geometry="primitive: plane; width: 4; height: 4" material="color: #7BC8A4"></a-entity>
<a-entity id="sky" geometry="primitive: sphere; radius: 100" material="color: #ECECEC; shader: flat; side: back"></a-entity>
</a-scene>
<script>
document.querySelector('a-scene').components.screenshot.capture('perspective')
</script>
</body>
</html>