Сортировка списка по значениям вложенного кортежа

Есть ли лучший способ отсортировать список по значениям вложенного кортежа, чем писать альтернативу itemgetter, извлекающую значение вложенного кортежа:

def deep_get(*idx):
  def g(t):
      for i in idx: t = t[i]
      return t
  return g

>>> l = [((2,1), 1),((1,3), 1),((3,6), 1),((4,5), 2)]
>>> sorted(l, key=deep_get(0,0))
[((1, 3), 1), ((2, 1), 1), ((3, 6), 1), ((4, 5), 2)]
>>> sorted(l, key=deep_get(0,1))
[((2, 1), 1), ((1, 3), 1), ((4, 5), 2), ((3, 6), 1)]

Я думал об использовании compose, но его нет в стандартной библиотеке:

sorted(l, key=compose(itemgetter(1), itemgetter(0))

Есть ли что-то, что я упустил в библиотеках, что могло бы сделать этот код лучше?

Реализация должна разумно работать с 100 тыс. Элементов.

Контекст: я хотел бы отсортировать словарь элементов, представляющих собой гистограмму. Ключи - это кортежи (a, b), а значение - это количество. В конце элементы следует отсортировать по убыванию количества, a и b. Альтернативой является сглаживание кортежа и прямое использование itemgetter, но в этом случае будет сгенерировано много кортежей.

6
задан DzinX 28 May 2011 в 17:55
поделиться