我有一个包裹在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] ) )

最佳答案

您需要组成获取器和比较器。效果:

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)))

关于python - python sorted()与itemgetter和比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55696005/

10-10 10:54