Использование sorted
:
>>> d = {'BLACK': 0, 'brown': 1, 'RED': 2, 'orange': 4, 'YELLOW': 7, 'green': 5, 'BLUE': 4,
'violet': 2, 'GRAY': 3, 'White': 6}
>> sorted(d, key=lambda i: (d[i], i.lower()))
['BLACK', 'brown', 'RED', 'violet', 'GRAY', 'BLUE', 'orange', 'green', 'White', 'YELLOW']
Примечание: здесь предполагается, что все должно быть строчными, поскольку Python сортирует прописные слова перед строчными.
Также я переименовал вашу переменную в d
потому что dict
является встроенным.
Чтобы разобрать, что происходит:
sorted
в словаре возвращает ключи, отсортированные по предоставленной функции key
(по умолчанию это прямое сравнениеключи)
>>> sorted(d)
['BLACK', 'BLUE', 'GRAY', 'RED', 'White', 'YELLOW', 'brown', 'green', 'orange', 'violet']
Чтобы отсортировать по значению, используйте dict.get
:
>>> sorted(d, key=d.get)
['BLACK', 'brown', 'RED', 'violet', 'GRAY', 'orange', 'BLUE', 'green', 'White', 'YELLOW']
Затем мы должны отсортировать по ключу в случае связи.Поскольку python сравнивает свои кортежи один за другим, мы можем создать кортеж из (value, key)
, и он будет сравнивать элементы, а затем, если они совпадают, он будет сравнивать элементы.
>>> (4, "blue") < (4, "orange")
True
>>> (4, "blue") < (3, "orange")
False