В Python я хочу отсортировать словарь на основе словаря значений словаря - PullRequest
0 голосов
/ 09 сентября 2018

В Python у меня есть словарь словаря, такой как

my_dict = {A:{mark1:15, mark2:12, mark3:20}, B:{mark1:10, mark2:90, 
mark3:14},C:{mark1:11, mark2:19, mark3:25}}

Я хочу напечатать словарь, отсортированный на основе mark3 каждого, например, я хочу напечатать в этом формате (я просто не знаю, как сортировать на основе mark3?)

C : {mark1:11, mark2:19, mark3:25}
A : {mark1:15, mark2:12, mark3:20}
B : {mark1:10, mark2:90, mark3:14}

Спасибо

1 Ответ

0 голосов
/ 09 сентября 2018

Вы можете использовать пользовательский ключ для сортировки:

print(dict(sorted(my_dict.items(), key=lambda x: x[1]['mark3'], reverse=True)))

Это выводит (в Python 3.6 +):

{'C': {'mark1': '11', 'mark2': '19', 'mark3': '25'}, 'A': {'mark1': '15', 'mark2': '12', 'mark3': '20'}, 'B': {'mark1': '10', 'mark2': '90', 'mark3': '14'}}

До Python 3.6 дикты неупорядочены, поэтому вместо них следует использовать collections.OrderedDict:

from collections import OrderedDict
my_dict = OrderedDict([('A', {'mark1': '15', 'mark2': '12', 'mark3': '20'}), ('B', {'mark1': '10', 'mark2': '90', 'mark3': '14'}), ('C', {'mark1': '11', 'mark2': '19', 'mark3': '25'})])
print(OrderedDict(sorted(my_dict.items(), key=lambda x: x[1]['mark3'], reverse=True)))

Если вы хотите сделать mark2 вторичным ключом, вместо него вы можете сделать ключ кортежем:

print(dict(sorted(my_dict.items(), key=lambda x: (x[1]['mark3'], x[1]['mark2']), reverse=True)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...