编写一个名为sort_by_average_rating
的函数,该函数将键值存储的列表/数组作为参数,其中每个键值存储都有键“ 评级”,“ 预算” ”和“ box_office ”,其中“预算”和“ box_office”是整数,而“ ratings”是整数列表。
根据“等级”中值的平均值对输入进行排序。
def sort_by_average_rating(lista):
lista.sort(sum(lista['ratings']) / int(len(lista['ratings'])))
return lista
输入时出现错误:
输入[{'ratings':[9,10,2,3,8,10,9],'预算':16219606.11,'box_office':13297812},{'ratings':[6,3 、、 1、7、9、2],“预算”:12995254.35,“ box_office”:26409035}]列表索引必须是整数或切片,而不是str。
预期输出:
[{'ratings': [6, 3, 1, 7, 9, 2], 'budget': 12995254.35, 'box_office': 26409035}, {'ratings': [9, 10, 2, 3, 8, 10, 9], 'budget': 16219606.11, 'box_office': 13297812}]
我在做什么错了?
答案 0 :(得分:0)
您的错误消息显示您具有以下词典列表:
L = [{'ratings': [9, 10, 2, 3, 8, 10, 9], 'budget': 16219606.11, 'box_office': 13297812},
{'ratings': [6, 3, 1, 7, 9, 2], 'budget': 12995254.35, 'box_office': 26409035}]
您可以仅将sorted
与自定义key
函数一起使用:
res = sorted(L, key=lambda x: sum(x['ratings']) / len(x['ratings']))
[{'box_office': 26409035, 'budget': 12995254.35, 'ratings': [6, 3, 1, 7, 9, 2]},
{'box_office': 13297812, 'budget': 16219606.11, 'ratings': [9, 10, 2, 3, 8, 10, 9]}]
或者,您可以使用statistics.mean
:
from statistics import mean
res = sorted(L, key=lambda x: mean(x['ratings']))
请注意,lambda
函数采用可迭代(L
)中的每个项目,而不是整个字典列表(如您当前的尝试那样)。