Во-первых, я думаю, что лучше организовывать данные в один список, вам не нужно 2 из них.Примерно так:
employees = [
{'user_id': '45621', 'rating' : 3, 'hours_worked' : 42 },
{'user_id': '78124', 'rating' : 4, 'hours_worked' : 78 },
{'user_id': '24613', 'rating' : 3, 'hours_worked' : 51 }]
, после чего вы можете использовать встроенную функцию sort
списка, объединить ее с operator.itemgetter
дважды с соответствующими клавишами, которые вы хотите.
Допустим, вы ценитеrating
больше hours_worked
, сначала нужно отсортировать по менее важному ключу.reverse=False
чтобы поставить высокое значение сверху.
Этот способ предоставит вам больше контроля, потому что иногда не обе сортировки находятся в одном и том же порядке.то есть: вы хотите отсортировать rating
по убыванию, но hours_worked
по возрастанию (пользователь с высоким рейтингом, но с меньшим количеством работы, значит, более эффективный)
import operator
employees.sort(key=operator.itemgetter('hours_worked'), reverse=True)
employees.sort(key=operator.itemgetter('rating'), reverse=True)
Результат:
[{'user_id': '78124', 'rating': 4, 'hours_worked': 78},
{'user_id': '24613', 'rating': 3, 'hours_worked': 51},
{'user_id': '45621', 'rating': 3, 'hours_worked': 42}]
Послесортируя, вы можете получить id
в порядке, используя понимание списка
[u['user_id'] for u in employees]
, что дает:
['78124', '24613', '45621']