Задать вопрос
@Samad_Samadovic

Как отсортировать и вывести такой словарь A = {"A_1": {1: "Yes"}, "C_2":{2: "No"}, "B_1": {1: "Yes"}}?

Мне нужно отсортировать словарь примерно вот так:
{"A_1": {1 : "Yes"}, "B_1": {1 : "Yes"} , "C_2":{2 : "No"}}
или вот второй пример:
{"A_2":{2:"Yes"}, "B_1":{1:"No"}} --> {"B_1":{1:"No"}, "A_2":{2:"Yes"}}
То есть мне нужно отсортировать по ключу значения(точнее в словаре в одной записи у меня есть значение в котором ещё один словарь и мне нужно отсортировать по ключу второго словаря)
И мне нужно вывести словарь что бы он выглядел примерно вот так:
A_1 - Yes
B_1 - Yes
C_2 - No
или
B_1 - No
A_2 - Yes
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
aRegius
@aRegius
Python Enthusiast
def get_nested_key(data):
	  return list(data[1])

dict(sorted(your_dict.items(), key=get_nested_key))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Словари по определению не сортируются. Точнее, не гарантируют сохранение сортировки (хотя в последних версиях Python вроде как сохраняется, но это фича, я бы на неё пока что не опирался).

Кроме того, существует специальный collections.OrderedDict, но требует импорта collections.

Но можно превратить ваш словарь в список из списков [ключ, значение] и отсортировать его по второму элементу. И вывести его. Если есть вложенные словари, значит надо сделать это дело рекурсивно. Надеюсь, с рекурсией вы уже разобрались?
Ответ написан
@Samad_Samadovic Автор вопроса
Вот так работает вывод списка:
a = {"A_2":{2:""}, "B_1":{1:"No"}, "A_3":{3:"Yes"}}
a = {key: a.get(key) for key in sorted(a, key=lambda x: [(int(i[1]), i[0]) for i in [x.split('_')]][0])}
    for k, v in a.items():
            l = []
            l.append(str(v.values()))
            if len(''.join(l)[14:len(str(v.values())) - 3]) > 0:
                print(f"{k} - {''.join(l)[14:len(str(v.values())) - 3]}")
            else:
                print(f"{k} - Ничего не записанно")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы