在排序过程中使用多个字段进行键评估的pythonic方法是什么?

fvrghl

Python3删除了排序时用于比较cmp参数,并将其替换为key

引入cmp_to_key函数的目的是“主要用作从Python 2转换程序的过渡工具”。

我不清楚如何使用cmppython3在本地重新创建行为key例如,如果我想按长度对字符串进行排序,并按字典顺序使用平局,那么我将编写如下内容:

def compare(word1, word2):
    if len(word1) > len(word2):
        return 1
    if len(word2) > len(word1):
        return -1
    if word1 < word2:
        return 1
    if word2 < word1:
        return -1
    return 0

myStrings.sort(key=functools.cmp_to_key(compare), reverse=True)

如何使用python3-native方式(不带python)进行对象之间的比较cmp_to_key

我能想到的一件事是返回一个更复杂的密钥,例如:

# This would return something like 5.12 for "hello" and 5.20 for "world"
def myKey(word):
    return len(word) + myLexicographicalValueFunction(word)/100

myStrings.sort(key=myKey, reverse=True)

但是,当您添加更多变量进行比较时,这似乎无法很好地扩展。在python3排序期间使用多个字段进行键评估的pythonic方式是什么?

阿兰·T。

对于该特定比较,您可以使用元组作为键:

myStings.sort(key=lambda s:(-len(s),s),reverse=True)

对于对象类,您可能需要实现一个比较运算符(例如,def __lt__(self,other):方法),以使排序知道如何对它们进行本机比较。

如果您无法修改对象类,或者您的比较非常复杂,则可以创建一个包装器对象,该对象__lt__()使用您所查找的lambda实现该方法:

class ObjectComp:
    def __init__(self,instance,cmp):
        self.instance = instance
        self.cmp      = cmp
        
    def __lt__(self,other):
        return self.cmp(self.instance,other.instance)
        
def cmpsort(objects,cmp):
    return [obj.instance for obj in sorted(ObjectComp(o,cmp) for o in objects)]


s = cmpsort([1,11,21,12,13],cmp=lambda a,b:a%10>b%10)
print(s)
[13, 12, 1, 11, 21]

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在排序期间使用多个字段进行键评估的pythonic方法是什么?

来自分类Dev

如何在Spring Data Web中使用多个字段desc和asc进行排序?

来自分类Dev

如何在Spring Data Web中使用多个字段desc和asc进行排序?

来自分类Dev

在MongoDB中使用位置运算符更新多个字段的性能含义是什么?

来自分类Dev

跨多个字典对键进行排序

来自分类Dev

在 C# 中使用键/值存储排序数据的最佳方法是什么

来自分类Dev

在Python中使用熊猫对多个字段进行索引

来自分类Dev

按多个字段对列表进行排序

来自分类Dev

在tsql存储过程中使用OPENQUERY的原因是什么?

来自分类Dev

在存储过程中使用多个可能为空的参数进行搜索

来自分类Dev

在存储过程中使用提取方法

来自分类Dev

在存储过程中使用提取方法

来自分类Dev

在MySQL中使用字段进行操作的最有效方法是什么?

来自分类Dev

使用两个字段进行查询时,为postgres表建立索引的正确方法是什么?

来自分类Dev

使用Java Comparator根据条件使用多个字段进行排序

来自分类Dev

如何使用键对列表中的多个字典进行排序(谷歌宝贝名练习_修改)

来自分类Dev

在存储过程中使用if / else进行计算

来自分类Dev

在存储过程中使用游标从多个表写入表

来自分类Dev

在 Swift 中使用 map 和排序的最佳方法是什么

来自分类Dev

在弹性搜索中的多个字段中使用多个参数进行搜索

来自分类Dev

在MongoDB聚合框架中使用多个字段按相关性排序

来自分类Dev

使用Scala sortWith函数对对象中的多个字段进行排序

来自分类Dev

如何使用比较器对集合中的多个字段进行排序?

来自分类Dev

在Python中的多个字典中搜索键的最佳方法是什么

来自分类Dev

使用多个键对列表进行排序

来自分类Dev

什么决定了在msbuild过程中使用哪个版本的Typescript?

来自分类Dev

与多个字段进行比较时提供严格的排序

来自分类Dev

WordPress / ACF:按多个字段对帖子进行排序

来自分类Dev

WordPress / ACF:按多个字段对帖子进行排序

Related 相关文章

  1. 1

    在排序期间使用多个字段进行键评估的pythonic方法是什么?

  2. 2

    如何在Spring Data Web中使用多个字段desc和asc进行排序?

  3. 3

    如何在Spring Data Web中使用多个字段desc和asc进行排序?

  4. 4

    在MongoDB中使用位置运算符更新多个字段的性能含义是什么?

  5. 5

    跨多个字典对键进行排序

  6. 6

    在 C# 中使用键/值存储排序数据的最佳方法是什么

  7. 7

    在Python中使用熊猫对多个字段进行索引

  8. 8

    按多个字段对列表进行排序

  9. 9

    在tsql存储过程中使用OPENQUERY的原因是什么?

  10. 10

    在存储过程中使用多个可能为空的参数进行搜索

  11. 11

    在存储过程中使用提取方法

  12. 12

    在存储过程中使用提取方法

  13. 13

    在MySQL中使用字段进行操作的最有效方法是什么?

  14. 14

    使用两个字段进行查询时,为postgres表建立索引的正确方法是什么?

  15. 15

    使用Java Comparator根据条件使用多个字段进行排序

  16. 16

    如何使用键对列表中的多个字典进行排序(谷歌宝贝名练习_修改)

  17. 17

    在存储过程中使用if / else进行计算

  18. 18

    在存储过程中使用游标从多个表写入表

  19. 19

    在 Swift 中使用 map 和排序的最佳方法是什么

  20. 20

    在弹性搜索中的多个字段中使用多个参数进行搜索

  21. 21

    在MongoDB聚合框架中使用多个字段按相关性排序

  22. 22

    使用Scala sortWith函数对对象中的多个字段进行排序

  23. 23

    如何使用比较器对集合中的多个字段进行排序?

  24. 24

    在Python中的多个字典中搜索键的最佳方法是什么

  25. 25

    使用多个键对列表进行排序

  26. 26

    什么决定了在msbuild过程中使用哪个版本的Typescript?

  27. 27

    与多个字段进行比较时提供严格的排序

  28. 28

    WordPress / ACF:按多个字段对帖子进行排序

  29. 29

    WordPress / ACF:按多个字段对帖子进行排序

热门标签

归档