stats1
函数接受一个dict
参数,并返回一个三元组列表,其中包含str
(提供者),int
(他/她提供的服务数量)和float
(平均专业水平)。结果必须按提供者的名称排序。调用stats1(db1)
返回:
[('Al', 2, 1.5), ('Bob', 2, 2.0), ('Carol', 3, 1.3333333333333333)]
请注意,Al提供2项服务,其平均专业水平为1.5((狗在2级,绘画在1级)。>>
db1 = { ('Al', 'dog-walking'): 2, ('Al', 'painting'): 1, ('Bob', 'dog-walking'): 1, ('Bob', 'knife-sharpening'): 3, ('Carol', 'cleanup'): 1, ('Carol', 'dog-walking'): 2, ('Carol', 'painting'): 1 }
我没有在解决方案中添加正确的值,并且无法对其进行排序。
到目前为止我所拥有的:
def stats(db1): d=defaultdict(lambda:[0,0]) z=1 for nametuple, expertlevel in db1.items(): d[nametuple[0]][0]+=1 if d[nametuple[0]][1]==0: d[nametuple[0]][1]+=expertlevel else: d[nametuple[0]][1]+=expertlevel/z z+=1 #return d return sorted(d.items(),key=lambda x: (-[x][0],x[1],d)) print(stats(db1))
如何修复我的代码?
stats1函数接受一个dict参数,并返回一个三元组的列表,其中包含一个str(一个提供程序),一个int(他/她提供的服务数量)和一个float(平均专业知识水平)。 ...
您处在正确的轨道上,我喜欢defaultdict
方法。如果将平均步骤与聚合步骤分离,则可能会发现逻辑更易于管理。
中间字典应包含提供程序名称键,每个提供程序名称键均映射到服务级别列表。遍历字典中的每个人,并取其平均服务来构建结果元组。提供的服务数量暗含列表的长度。
您的均值算法不正确,您需要这样做:
您也可以使用列表理解来做到这一点: