#python #sorting
#python #сортировка
Вопрос:
У меня есть словарь списка, подобный этому: {1: {'a': 5, 'score': 3}, 2: {'a': 6, 'score': 1}, 3: {'a': 7, 'score': 2}}
и я хочу отсортировать его, используя его score
атрибут. Предполагаемый результат: {2: {'a': 6, 'score': 1}, 3: {'a': 7, 'score': 2}, 1: {'a': 5, 'score': 3}}
Я пытаюсь использовать встроенную функцию для сортировки списка, но она не дает желаемого результата updatedList = sorted(b, key=lambda k: k['score'])
Любые подсказки, как я могу получить желаемый результат?
Ответ №1:
Ваша структура данных представляет собой вложенный словарь, а не список.
Чтобы отсортировать словарь, вы можете изменить свою key
функцию следующим образом:
>>> d = {1: {'a': 5, 'score': 3}, 2: {'a': 6, 'score': 1}, 3: {'a': 7, 'score': 2}}
>>> dict(sorted(d.items(), key=lambda x: x[1]['score']))
{2: {'a': 6, 'score': 1}, 3: {'a': 7, 'score': 2}, 1: {'a': 5, 'score': 3}}
Который преобразует исходный словарь в dict.items
, затем использует score
ключ из словаря в (key, value)
кортеже. Затем после сортировки с sorted()
помощью мы можем преобразовать обратно в словарь с dict()
помощью .
Это работает в Python 3.6 , поскольку словари упорядочены. Если вы используете более низкую версию python, вы можете поддерживать порядок вставки словаря с collections.OrderedDict
помощью instead .
Ответ №2:
Для сортировки вложенного словаря используйте key
аргумент for sorted()
. Это позволяет вам указать функцию, которая, учитывая фактический сортируемый элемент, возвращает значение, по которому следует отсортировать.
N_Dictionary = {1: {'a': 5, 'score': 3}, 2: {'a': 6, 'score': 1}, 3: {'a': 7, 'score': 2}}
s_values = sorted(N_Dictionary.items(), key = lambda x: x[1]["score"] )
s_values