按嵌套元组值排序列表

Tho*_*ung 6 python sorting tuples

有没有更好的方式来排序比写一个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)]
Run Code Online (Sandbox Code Playgroud)

我想过使用compose,但这不在标准库中:

sorted(l, key=compose(itemgetter(1), itemgetter(0))
Run Code Online (Sandbox Code Playgroud)

我在libs中遗漏了哪些内容会使这段代码变得更好?

实施应该合理地使用100k项目.

上下文:我想对直方图项目的字典进行排序.键是元组(a,b),值是计数.最后,项目应按计数递减,a和b排序.另一种方法是展平元组并直接使用itemgetter,但这样会产生很多元组.

nin*_*cko 11

是的,你可以使用一个 key=lambda x: x[0][1]

  • @utdmr一切都通过C,但你仍然转向python; 如果大部分计算都是用C完成的,并且C通过避免开销来获得某种主要优势,那么你只能期望加速.此外**`compose`是用`lambda`**实现的(实际上和函数一样)所以你没有保存任何东西.欢迎您自己测试一下.你填写发现'compose`方法运行速度慢50%.`deep_get`然而我希望大致在同一时间运行(事实上它确实如此).你总是可以使用`dis.dis`来查看代码编译的内容. (2认同)