擅长:python、mysql、java
<p>平均值的算法不正确,需要执行以下操作:</p>
<pre><code>def stats(db1):
d=defaultdict(lambda:[0,0])
for nametuple, expertlevel in db1.items():
d[nametuple[0]][0]+=1
d[nametuple[0]][1] = (d[nametuple[0]][1]*(d[nametuple[0]][0]-1)+expertlevel)/d[nametuple[0]][0]
#return d
return d.items()
print(stats(db1))
</code></pre>
<p>输出:</p>
<pre><code>dict_items([('Al', [2, 1.5]), ('Bob', [2, 2.0]), ('Carol', [3, 1.3333333333333333])])
</code></pre>
<p>但更明确的答案是(根据<a href="https://stackoverflow.com/questions/59540775/using-dictionary-to-return-list-of-3-tuples/59541067?noredirect=1#comment105251381_59541067">ggorlen's comment</a>编辑):</p>
<pre><code>from itertools import groupby
lst = []
for k,g in groupby(sorted(db1.items()), lambda x:x[0][0]):
provider = k
args = list(g)
services = len(args)
expertise = sum(elem[1] for elem in args)/services
lst.append((provider, services, expertise))
print(lst)
</code></pre>
<p>输出:</p>
<pre><code>[('Al', 2, 1.5), ('Bob', 2, 2.0), ('Carol', 3, 1.3333333333333333)]
</code></pre>