Вы можете начать с подсчета количества раз, когда каждое значение появляется с collections.Counter
:
from collections import Counter
c = Counter(d.values())
# Counter({20: 1, 30: 1, 50: 3, 60: 2})
А теперь отсортируйте словарь, посмотрев, сколько раз каждое значение появляется, используя key
в sorted
:
sorted(d.items(), key=lambda x: c[x[1]], reverse=True)
[('jan', 50), ('april', 50), ('may', 50), ('march', 60), ('june', 60),
('feb', 30), ('july', 20)]
Обратите внимание, однако, что если вы получите словарь из результата, порядок не будет поддерживаться, так как словари не имеют порядка.
Итак, вы можете использовать collections.OrderedDict
, чтобы сохранить порядок, просто наберите OrderedDict(res)
в результирующем списке кортежей.