<p>在没有第三方模块的情况下,Python提供了所需的工具:</p>
<pre><code>from itertools import groupby
from operator import itemgetter
from statistics import mean
mylist = ... copy from question ...
results = []
# Group runs of values with identical words
for word, grp in groupby(mylist, key=itemgetter(0)):
avg = mean(map(itemgetter(1), grp)) # Grab values for word and take their mean
results.append((word, avg))
print(*results, sep="\n")
</code></pre>
<p><a href="https://tio.run/##bZLLbtswEEX3@gohm0iFGvAxw0cBf0mbBW3TjhBJJCi6rr/eHZNxWzTmknNm7h3yxkt@C4u8Xg8pzO2YfcohTGs7zjGk3B5TOMXtpSnVEH1yOaR7kej56DP11PqaXR7XPO7@tM/eLU0zXya6bjft96Z7nl0as5ueh5a9oBHMCGTWWkCmTD/8DwDjnAnJANAo/gBAg3SvOHJkgKIAMYVd8uQlLBXSXBgEo4Tgkkss0Nml9W2MBQANUmspgXNtjIUCbP3iD25H@1bGEKUMUdpolEoVyNH2y97vqw4XTIHhgEqjQlvNuOQXeuNQGcWMudnhHDRjsho@LbRTGu9jEKySmmkrJLl5jFgtyDSTIJXQ9hFC7SioKvAmpwuyC9PktqH8YqUscClEeV4LUJfyv76ex4MvgJZKKya5IRWhFHwCFLeMS8sQSY5p/AxoEFpqYaUACcz0zWvTJL@eprzeMvHaHChS55D2A8UttuNyT11XgzO07/6y@Ru2jvX9t6al434eacItZN3sYvcPwvsyrO8L96H24mKk3@q6KkbdVI9pXHL35QMZ2tXHzdOP5am/Xn8D" rel="nofollow noreferrer" title="Python 3 – Try It Online">Try it online!</a></p>
<p>请注意,<code>groupby</code>与面向<code>dict</code>的解决方案不同,它要求分组的单词相邻出现(因此,例如,如果您在输入的<em>结束</em>处添加了第二个<code>'procreation'</code>条目,则不会与前面的条目分组)</p>
<p>如果不能保证是这样,您需要将<code>groupby(mylist, key=itemgetter(0))</code>更改为<code>groupby(sorted(mylist, key=itemgetter(0)), key=itemgetter(0))</code>以使其工作,但这将导致渐进运行时受到影响^{<预排序数据上的cd1>}是<code>O(n)</code>(不可能渐近击败),基于<code>dict</code>的解决方案是预期的<code>O(n)</code>(最坏情况<code>O(n**2)</code>,但Python试图防御可能触发它的故意攻击),而<code>groupby</code>+<code>sorted</code>是<code>O(n log n)</code>,使其比预期的<code>dict</code>性能更差</p>