Как отсортировать список словарей по среднему значению указанного значения - PullRequest
0 голосов
/ 14 ноября 2018

Напишите функцию с именем sort_by_average_rating, которая принимает список / массив хранилищ значений ключей в качестве параметра, где каждое хранилище значений ключей имеет ключи " рейтинги ", " бюджет"и" box_office", где" budget "и" box_office "- это целые числа, а" Rating "- это список целых чисел.

Сортировка ввода на основе среднего значения в "рейтингах".

def sort_by_average_rating(lista):
    lista.sort(sum(lista['ratings']) / int(len(lista['ratings'])))
    return lista

Я получаю ошибку при вводе:

ошибка на входе [{'оценок': [9, 10, 2, 3, 8, 10, 9], 'бюджет': 16219606.11, 'box_office': 13297812}, {'оценки': [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}]

Что я делаю не так?

1 Ответ

0 голосов
/ 14 ноября 2018

В вашем сообщении об ошибке говорится, что у вас есть следующий список словарей:

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), а не весь список словарей (как в вашей текущей попытке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...