Python: сортировка по значению вложенного словаря (без категорий) - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно отсортировать (в порядке убывания) следующее по вложенному значению на человека:

d={
'BILLY': {'beer': 1, 'socks': 3, 'germs': 2}, 
'JAN': {'mewo': 18, 'towel': 83, 'bee': 27}, 
'NICK': {'shoes': 50, 'hats': 15, 'dogs': 95}
}

Результаты должны быть

БИЛЛИ:
носки= 3
микробов = 2
пива = 1

JAN:
полотенце = 83
пчела = 27
mewo = 18

НИК:
собаки = 95
обувь = 50
шляпы = 15

Я пробовал следующее, но получаю ошибки:

outer_keys = d.keys()
print ("outer keys:")
for outer_key in outer_keys:
    print (outer_key)

print ("*" * 40)
inner_keys = d[outer_key].keys()

for key in inner_keys:
    ordered = sorted(d.items(), key=lambda item: item[1][key])

print(ordered)

1 Ответ

0 голосов
/ 10 октября 2018

Так как вам нужно перебирать и субдиректории (хранящиеся в значениях), вам нужен вложенный цикл.Таким образом, «скелет» выглядит так:

for k, subdic in d.items():
    print(k)
    # ...
    print()

Сами словари являются неупорядоченными .Нам нужна структура данных, которая поддерживает порядок, например, список.Мы можем отсортировать элементы, взяв элемент value из кортежа.Таким образом, для поддиректории мы можем отсортировать его следующим образом:

sorted(subdic.items(), key=lambda x: x[1], reverse=True)

Затем нам нужно будет выполнить итерации по этим элементам и распечатать их, например:

for subk, v in sorted(subdic.items(), key=lambda x: x[1], reverse=True):
    print(f'{subk} = {v}')

Таким образом, мы можем объединить два в:

for k, subdic in d.items():
    print(k)
    for subk, v in sorted(subdic.items(), key=lambda x: x[1], reverse=True):
        print(f'{subk} = {v}')
    print()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...