<p><strong>解决方案:</strong></p>
<pre><code>trimmed={}
for k,v in data.items():
trimmed.setdefault((k[0],k[-1]),[]).append(v)
{k:sum(v) for k,v in trimmed.items()}
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>{('20144', '4'): 18183.44, ('20144', '31'): 30965.4, ('20143', '31'): 5700.53, ('20144', '2'): 30266.6, ('20143', '4'): 52490.46}
</code></pre>
<p>举个例子,这就是<code>trimmed</code>循环后的<code>for</code>样子:</p>
<pre><code>{('20144', '4'): [12321.88, 5861.56], ('20144', '31'): [30965.4], ('20143', '4'): [52490.46], ('20144', '2'): [12911.5, 17355.1], ('20143', '31'): [5700.53]}
</code></pre>
<p><strong>说明:</strong></p>
<p><code>for</code>循环遍历示例数据中的数据键(<code>k</code>)和键值(<code>v</code>)。如果键<code>(k[0],k[-1])</code>(例如,键元组中的第一个和最后一个值<code>('20144','4'):</code>)在新字典<code>trimmed</code>中不存在,则创建一个空列表并附加值(<code>v</code>)。如果键确实存在,则只需附加值。你知道吗</p>
<p>完成<code>trimmed</code>字典之后,一个简单的字典理解将所有这些列表相加。你知道吗</p>
<p><strong>编辑:</strong></p>
<p>正如在注释中指出的,如果性能有问题,您也可以使用来自<code>collections</code>的<a href="https://docs.python.org/2/library/collections.html#collections.defaultdict" rel="nofollow noreferrer">defaultdict</a>:</p>
<pre><code>from collections import defaultdict
trimmed=defaultdict(float)
for k,v in data.items():
trimmed[(k[0],k[-1])]+=v
</code></pre>
<p>这里的值存储在<code>trimmed</code>。<code>trimmed</code>defaultdict中新初始化的键将是<code>0.0</code>。然后就可以在适当的地方添加<code>v</code>。你知道吗</p>