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

时间:2018-11-13 23:23:50

标签: python algorithm list sorting dictionary

编写一个名为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}]

我在做什么错了?

1 个答案:

答案 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)中的每个项目,而不是整个字典列表(如您当前的尝试那样)。