Вот функция, которая с учетом спецификации цвета в шестнадцатеричном RGB возвращает свой цвет HSV:
import colorsys
def get_hsv(hexrgb):
hexrgb = hexrgb.lstrip("#") # in case you have Web color specs
r, g, b = (int(hexrgb[i:i+2], 16) / 255.0 for i in xrange(0,5,2))
return colorsys.rgb_to_hsv(r, g, b)
Теперь вы можете использовать это для сортировки списка шестнадцатеричных цветов RGB по оттенку:
color_list = ["000050", "005000", "500000"] # GBR
color_list.sort(key=get_hsv)
print color_list
Сортируя с использованием всего кортежа HSV, вы гарантируете, что цвета, не имеющие оттенка (то есть оттенки серого), сортируются в согласованном месте, а цвета с одинаковым оттенком, но разными насыщенностью / значениями сортируются в согласованном порядке относительноих более насыщенные / ценные аналоги.
У вас все еще будет что-то вроде беспорядка, если цвета будут сильно различаться по насыщенности (интенсивности) или значению (яркости), но от этого никуда не деться.