擅长:python、mysql、java
<blockquote>
<p>To me, this error makes no sense. If reduce is truly iterating through the given parameter, then each item passed into the lambda-function should be a dictionary</p>
</blockquote>
<p>不,传递给lambda的<em>first</em>参数(对于除第一个调用之外的所有调用)是上一次调用lambda的返回值。您的函数返回一个数字,因此调用它时,<code>x</code>是一个数字,而不是字典。在</p>
<p>有两种方法可以解决这个问题。可能更直接的一点是:</p>
<pre><code>num_favorites = reduce(lambda x, y: x + y['likes'], msgs, 0)
</code></pre>
<p><code>0</code>是要reduce的“初始值设定项”参数,它为<code>x</code>提供第一个值。现在在每个调用中,<code>x</code>是正在运行的和,<code>y</code>是下一个字典。在</p>
<p>另一种方式,只是为了证明这是可以做到的,那就是:</p>
^{pr2}$
<p>这使得lambda的返回值是一个带有<code>likes</code>键的dict,就像它的参数一样,因此我们一直使用同一类型。在这种情况下,这是不必要的和浪费的,但如果您聚合了多个密钥,这可能是一个有趣的方法。在</p>