python sorted()与itemgetter和比较器

时间:2019-04-15 19:24:22

标签: python python-3.x sorting

我有一个比较器函数,该函数用functools.cmp_to_key包装,以便在调用sorted()时可以使用它。

问题是我已经在使用itemgetter作为密钥了。 itemgetter用于从字典中检索值,而该值就是用来对集合进行排序的。

因此,从本质上讲,我需要使用itemgetter来检索值,然后需要使用比较器函数对它们进行正确排序。

我尝试了以下组合,但似乎都不起作用:

for x in range( 0, len(sort_columns) ):
  comparer = cmp_to_key(sort_columns[x].sort_func)
  results = sorted( data, key=comparer )
  results = sorted( data, key=comparer(itemgetter( sort_columns[x] ) ) )
  results = sorted( data, key=itemgetter( comparer( sort_columns[x] ) ) )

如果不需要特定的比较器,则将其称为:

results = sorted( data, key=itemgetter( sort_columns[x] ) )

1 个答案:

答案 0 :(得分:2)

您需要组成获取器和比较器。可以起到以下作用的

for columns in sort_columns: # don't use a range loop unless you need to
    comparer = cmp_to_key(columns.sort_func)
    getter = itemgetter(columns)
    data = sorted(data, key=lambda x: comparer(getter(x)))