Как правильно отсортировать вложенный словарь по ключам в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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