<p>您可以将<code>itertools.groupby</code>与一些单行理解结合使用:</p>
<pre><code>from itertools import groupby
from statistics import mean
myDict = {1: 10, 1.1: 10, 2: 15, 2.1: 20}
{mean(keys): sum(vals) for keys, vals in (zip(*g) for _, g in groupby(sorted(myDict.items()), key=lambda x: round(x[0])))}
</code></pre>
<p>任何四舍五入到同一整数的数字都将被分组在一起。你知道吗</p>
<p>说明:</p>
<pre><code>{
mean(keys): sum(vals)
for keys, vals in (
zip(*g) for _, g in groupby(
sorted(myDict.items()),
key=lambda x: round(x[0])
)
)
}
</code></pre>
<p><code>sorted(myDict.items())</code>按键对字典排序(它按字典顺序排序,键排在第一位)。你知道吗</p>
<p><code>groupby(sorted(myDict.items()), key=lambda x: round(x[0])))}</code>按舍入键的值对已排序的项进行分组。你知道吗</p>
<p><code>zip(*g) for _, g in groupby(...)</code>表示这些组通过<code>groupby</code>吐出。<code>groupby</code>产生两个结果:我们不需要的“key”(舍入的数字)(用<code>_</code>表示)和格式为<code>(key, val), (key, val), (key, val), etc.</code>的“group”<code>zip(*)</code>将其转换成<code>(key, key, key, ...), (val, val, val, ...)</code>,这就是我们需要的。你知道吗</p>
<p>最后,<code>mean(keys): sum(vals) for keys, vals in (...)</code>通过分别应用<code>mean</code>和<code>sum</code>来转换键和值。你知道吗</p>