Сортировка вложенного словаря по значению и остатка по другому значению в Python
рассмотрим этот формат словаря.
{'KEY1':{'name':'google','date':20100701,'downloads':0},
'KEY2':{'name':'chrome','date':20071010,'downloads':0},
'KEY3':{'name':'python','date':20100710,'downloads':100}}
сначала я хотел бы, чтобы словарь был отсортирован по загрузкам, а затем все элементы без загрузки, отсортированные по дате. Очевидно, словарь не может быть отсортирован, мне просто нужен отсортированный список ключей,которые я могу перебирать.
['KEY3','KEY1','KEY2']
Я уже могу отсортировать список по любому значению, используя sorted
, но как Сортировать по второму значению?
4 ответов
использовать на sorted()
. Он позволяет указать функцию, которая, учитывая фактический сортируемый элемент, возвращает значение, которое должно быть Отсортировано. Если это значение является кортежем, то оно сортируется как кортежи сортируются по первому значению, а затем по второму значению.
sorted(your_list, key=lambda x: (your_dict[x]['downloads'], your_dict[x]['date']))
другой мой ответ был неправильным (как и большинство ответов здесь)
sorted_keys = sorted((key for key in outer_dict if outer_dict[key]['downloads']),
key=lambda x: (outer_dict[key]['downloads'],
outer_dict[key]['downloads'])
reverse=True)
sorted_keys += sorted((key for key in outer_dict if not outer_dict[key]['downloads']),
key=lambda x: outer_dict[key]['date'])
это создаст список с элементами, которые были загружены отсортированы в порядке убывания в передней части его и остальные элементы, которые не были загружены отсортированы по дате после тех, которые есть.
но на самом деле, последняя часть Эли Courtwrights ответ самый лучший.
a = {'KEY1':{'name':'google','date':20100701,'downloads':0},
'KEY2':{'name':'chrome','date':20071010,'downloads':0},
'KEY3':{'name':'python','date':20100710,'downloads':100}}
z = a.items()
z.sort(key=lambda x: (x[1]['downloads'], x[1]['date']))