Как правильно отсортировать вложенный словарь по ключам в Python3, где мы берем номера счетов из строк ключейPython

Программы на Python
Anonymous
Как правильно отсортировать вложенный словарь по ключам в Python3, где мы берем номера счетов из строк ключей

Сообщение Anonymous »

Предположим, что словарь выглядит следующим образом, в котором у нас есть строка с некоторым числом для ключа (не обязательно в любом порядке, и не гарантируется, что это будет непрерывная последовательность, и единственный шаблон, который будут использовать ключи). Далее следует, что строка случайного ключа будет иметь число в конце строки после -):

Код: Выделить всё

nested_dict = {
"outter_key_layer-3": {
"inner_key_layer-4": "random_value",
"inner_key_layer-2": "random_value",
...
"inner_key_layer-11": "random_value",
"inner_key_layer-22": "random_value",
...
...
"inner_key_layer-31": "random_value",
"inner_key_layer-112": "random_value",
...
},
"outter_key_layer-54": {
"inner_key_layer-1": "random_value",
"inner_key_layer-2": "random_value",
...
"inner_key_layer-11": "random_value",
"inner_key_layer-112": "random_value",
...
"inner_key_layer-12": "random_value",
"inner_key_layer-11": "random_value",
...
},
...
"outter_key_layer-13": {
"inner_key_layer-1": "random_value",
"inner_key_layer-2": "random_value",
...
"inner_key_layer-5": "random_value",
"inner_key_layer-10": "random_value",
...
"inner_key_layer-6": "random_value",
"inner_key_layer-23": "random_value",
...
},
...
}
Как я мог добиться следующего, где ключи расположены в алфавитном порядке, но числа также учитываются как целые числа для сортировки:

Код: Выделить всё

nested_dict = {
"outter_key_layer-1": {
"inner_key_layer-1": "random_value",
"inner_key_layer-2": "random_value",
...
"inner_key_layer-11": "random_value",
"inner_key_layer-12": "random_value",
...
...
"inner_key_layer-111": "random_value",
"inner_key_layer-112": "random_value",
...
},
"outter_key_layer-2": {
"inner_key_layer-1": "random_value",
"inner_key_layer-2": "random_value",
...
"inner_key_layer-11": "random_value",
"inner_key_layer-12": "random_value",
...
"inner_key_layer-111": "random_value",
"inner_key_layer-112": "random_value",
...
},
...
"outter_key_layer-11": {
"inner_key_layer-1": "random_value",
"inner_key_layer-2": "random_value",
...
"inner_key_layer-11": "random_value",
"inner_key_layer-12": "random_value",
...
"inner_key_layer-111": "random_value",
"inner_key_layer-112": "random_value",
...
},
...
}
Пытался изменить следующее из ранее заданного вопроса, но ничего не получилось, например, попытаться отфильтровать целые числа и каким-то образом отсортировать их:

Код: Выделить всё

sorted_dict = {key: dict(sorted(nested_dict[key].items())) for key in sorted(nested_dict)}
При рассмотренном выше вложенном внутреннем ключе сортировка не будет осуществляться должным образом, числовые значения по-прежнему будут восприниматься как строки: внутренний_ключ_слой-1, внутренний_ключ_слой-11, ...,inner_key_layer-12,inner_key_layer-2...
Я знаю, что существует множество различных вопросов по вариантам использования, связанных с сортировкой вещи с Python, но любая помощь или предложения будут приветствоваться. Спасибо.
LE: Проведя дополнительные исследования, я наткнулся на пакет natsort, и использование его таким образом в основном дает то, что я ищу:

Код: Выделить всё

from natsort import natsorted

my_sorted_dict = {key: dict(natsorted(nested_dict[key].items())) for key in sorted(nested_dict)}
Однако мне все еще интересно, есть ли способ сделать это без использования или установки другого пакета.

Подробнее здесь: https://stackoverflow.com/questions/786 ... take-in-ac

Вернуться в «Python»