如何将其他参数传递给自定义python排序功能

巴克

背景:

我想知道如何实现高级排序功能,这些功能可以作为元组元素传递给python'sorted'函数的键参数。

这是一个描述我想做什么的例子:

class Book:

      def __init__(self, name, author, language, cost):
          self.name = name
          self.author = author
          self.language=language
          self.cost = cost


bookList = [list of books]

firstLanguage = "Armenian"
possibleLanguages = ["English", "Spanish", "Armenian", "French", "Chinese", "Swahili"]
possibleLanguages.remove("Armenian")

sortedBookList = sorted(bookList, key=(sortByName,
    sortByFirstLanguage(firstLanguage), sortByLanguages(possibleLanguages) ))

基本上,我想实现上述的'sortByFirstLanguage'和'sortByLanguages'函数,以便将它们作为'key'参数的元组项传递给python'sorted'函数。这是一些有关自定义排序功能应如何的示例代码:

def sortByName(elem):
    return elem.name

def sortByFirstLanguage(elem, firstLanguage):
    if elem.language == firstLanguage:
       return 1
    else:
       return -1


def sortByLanguages(elem, possibleLanguages):
    if elem.language in possibleLanguages:
       return possibleLanguages.index(elem.language)

加。细节:

  1. 我正在使用python 2.7
  2. 这个问题实际上是使用Django查询集而不是对象列表,但是出于演示目的,我认为对象列表具有相同的目的。
  3. 排序的目的是先按指定的语言排序,然后再按默认顺序(在这种情况下为列表排序)对其余项进行&&排序。

题:

我如何准确地告诉'key'参数将额外的参数'firstLanguage'&&'possibleLanguages'传递给自定义排序函数,如我上面所示?

山姆·穆斯曼

正如Ashish在评论中所指出的那样,由于key仅接受单个功能,因此我们首先需要组合这些功能。如果我们返回函数结果的序列(列表,元组),则Python将做正确的事情,仅在较早的元素相等()的情况下才比较较晚的元素(较右边的元素)。

我知道有几种方法可以做到这一点。

使用lambda:

sortedBookList = sorted(
    bookList, 
    key=lambda elem: (sortByName(elem), 
                      sortByFirstLanguage(elem, firstLanguage), 
                      sortByLanguages(elem, possibleLanguages)))

使用高阶函数:

def key_combiner(*keyfuncs):
  def helper(elem):
    return [keyfunc(elem) for keyfunc in keyfuncs]
  return helper

def sortByFirstLanguage(firstLanguage):
  def helper(elem):
    return elem.language == firstLanguage  # True > False
  return helper

def sortByLanguages(possibleLanguages):
  def helper(elem):
    if elem.language in possibleLanguages:
       return possibleLanguages.index(elem.language)
  return helper

sortedBookList = sorted(bookList,
                        key=key_combiner(sortByName, 
                                         sortByFirstLanguage(firstLanguage), 
                                         sortByLanguages(possibleLanguages))

Lambda对我来说似乎是最干净的,所以这可能就是我要使用的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将额外的参数传递给AngularJS中的自定义排序功能

来自分类Dev

将额外的参数传递给AngularJS中的自定义排序功能

来自分类Dev

如何将其他依赖项传递给React自定义钩子

来自分类Dev

如何在javascript或其他方法中自定义排序功能?

来自分类Dev

如何将其他参数传递给UITapGestureRecognizer?

来自分类Dev

如何将其他参数传递给OWIN登录?

来自分类Dev

如何将其他参数传递给useSelector

来自分类Dev

如何将其他参数传递给pyspark中用于过滤方法的用户定义方法?

来自分类Dev

如何将自定义排序功能添加到jquery网格?

来自分类Dev

如何将功能传递给自定义控件

来自分类Dev

如何实现自定义模板排序功能?

来自分类Dev

groupby pandas python的自定义排序功能

来自分类Dev

如何将参数传递给自定义操作?

来自分类Dev

PostgreSQL自定义排序功能

来自分类Dev

敲除将其他参数传递给订阅功能

来自分类Dev

您如何将其他道具传递给React中的功能组件?

来自分类Dev

发送请求时如何将其他参数传递给Ajax响应

来自分类Dev

如何将其他参数传递给事件处理程序?

来自分类Dev

如何将其他参数传递给jQuery DataTable ajax调用?

来自分类Dev

如何将其他参数传递给graffle.js

来自分类Dev

Yii2:如何将其他参数传递给listview

来自分类Dev

如何将其他参数传递给scipy.optimize.newton_krylov?

来自分类Dev

如何将其他参数传递给node.js中的封装回调函数

来自分类Dev

如何将其他参数传递给ajax回调函数?

来自分类Dev

React / JS-如何将其他参数传递给onClick处理程序

来自分类Dev

DataTables自定义日期排序功能

来自分类Dev

AngularJS中的自定义排序功能

来自分类Dev

具有struct的自定义排序功能

来自分类Dev

谷歌图表表中的自定义排序功能

Related 相关文章

  1. 1

    将额外的参数传递给AngularJS中的自定义排序功能

  2. 2

    将额外的参数传递给AngularJS中的自定义排序功能

  3. 3

    如何将其他依赖项传递给React自定义钩子

  4. 4

    如何在javascript或其他方法中自定义排序功能?

  5. 5

    如何将其他参数传递给UITapGestureRecognizer?

  6. 6

    如何将其他参数传递给OWIN登录?

  7. 7

    如何将其他参数传递给useSelector

  8. 8

    如何将其他参数传递给pyspark中用于过滤方法的用户定义方法?

  9. 9

    如何将自定义排序功能添加到jquery网格?

  10. 10

    如何将功能传递给自定义控件

  11. 11

    如何实现自定义模板排序功能?

  12. 12

    groupby pandas python的自定义排序功能

  13. 13

    如何将参数传递给自定义操作?

  14. 14

    PostgreSQL自定义排序功能

  15. 15

    敲除将其他参数传递给订阅功能

  16. 16

    您如何将其他道具传递给React中的功能组件?

  17. 17

    发送请求时如何将其他参数传递给Ajax响应

  18. 18

    如何将其他参数传递给事件处理程序?

  19. 19

    如何将其他参数传递给jQuery DataTable ajax调用?

  20. 20

    如何将其他参数传递给graffle.js

  21. 21

    Yii2:如何将其他参数传递给listview

  22. 22

    如何将其他参数传递给scipy.optimize.newton_krylov?

  23. 23

    如何将其他参数传递给node.js中的封装回调函数

  24. 24

    如何将其他参数传递给ajax回调函数?

  25. 25

    React / JS-如何将其他参数传递给onClick处理程序

  26. 26

    DataTables自定义日期排序功能

  27. 27

    AngularJS中的自定义排序功能

  28. 28

    具有struct的自定义排序功能

  29. 29

    谷歌图表表中的自定义排序功能

热门标签

归档