繁体   English   中英

如何按指定值的平均值对字典列表进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM