有没有更好的方法来按嵌套元组值对列表进行排序,而不是编写一个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))
有没有我在库中遗漏的内容可以使这段代码更好?
该实现应该能够合理地处理100k个项目。
背景:我想对一个直方图字典进行排序。键是元组(a,b),值是计数。最终,项目应按计数、a和b降序排序。另一种方法是展平元组并直接使用itemgetter,但这样会生成很多元组。
sort
的实现都可以在处理10万个项目时表现合理。 - ninjagecko