[英]How to sort list of dictionaries by average of specified value
编写一个名为sort_by_average_rating
的函数,它将键值存储列表/数组作为参数,其中每个键值存储具有键“ ratings ”、“ budget ”和“ box_office ”,其中“budget”和“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], 'budget': 16219606.11, 'box_office': 13297812}, {' ratings': [6, 3, 1, 7, 9, 2], 'budget': 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}]
我究竟做错了什么?
您的错误消息说您有以下字典列表:
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
) 中的每个项目,而不是整个字典列表(如您当前的尝试)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.