Вы можете передать key
функцию в sorted
, которая возвращает кортеж, содержащий две вещи, по которым вы хотите отсортировать.Предполагая, что ваш большой словарь называется d
:
def keyfunc(tup):
key, d = tup
return d["downloads"], d["date"]
items = sorted(d.items(), key = keyfunc)
Вы можете сделать это с lambda
, если хотите, но это, вероятно, более понятно.Вот эквивалентный лямбда-код:
items = sorted(d.items(), key = lambda tup: (tup[1]["downloads"], tup[1]["date"]))
Кстати, поскольку вы упомянули, что сначала хотите отсортировать по «загрузкам», два приведенных выше примера сортируют по количеству загрузок в порядке возрастания.Однако из контекста может показаться, что вы можете отсортировать в порядке убывания загрузок, и в этом случае вы скажете
return -d["downloads"], d["date"]
в вашем keyfunc
.Если вам нужно что-то вроде сортировки в порядке возрастания для ненулевых номеров загрузки, а затем, имея после этого все записи с нулевой загрузкой, вы можете сказать что-то вроде
return (-d["downloads"] or sys.maxint), d["date"]