首页 > 其他分享 >pythoy排序不支持原生比较的对象

pythoy排序不支持原生比较的对象

时间:2023-12-21 23:31:44浏览次数:43  
标签:原生 users attrgetter user key pythoy 排序 id User

问题

你想排序类型相同的对象,但是他们不支持原生的比较操作。

解决方案

内置的 sorted() 函数有一个关键字参数 key ,可以传入一个 callable 对象给 它,这个 callable 对象对每个传入的对象返回一个值,这个值会被 sorted 用来排序 这些对象。比如,如果你在应用程序里面有一个 User 实例序列,并且你希望通过他们 的 user_id 属性进行排序,你可以提供一个以 User 实例作为输入并输出对应 user_id 值的 callable 对象。比如:

class User:
def __init__(self, user_id):
self.user_id = user_id def __repr__(self):
return 'User({})'.format(self.user_id)
def sort_notcompare():
users = [User(23), User(3), User(99)] print(users)
print(sorted(users, key=lambda u: u.user_id))

另外一种方式是使用 operator.attrgetter() 来代替 lambda 函数:

>>> from operator import attrgetter
>>> sorted(users, key=attrgetter('user_id')) [User(3), User(23), User(99)]
>>>

讨论

选择使用 lambda 函数或者是 attrgetter() 可能取决于个人喜好。但是, attrgetter() 函数通常会运行的快点,并且还能同时允许多个字段进行比较。这 个跟 operator.itemgetter() 函数作用于字典类型很类似(参考 1.13 小节)。例如, 如果 User 实例还有一个 first_name 和 last_name 属性,那么可以向下面这样排序:

同样需要注意的是,这一小节用到的技术同样适用于像 min() 和 max() 之类的函数。比如:

>>> min(users, key=attrgetter('user_id')) User(3)
>>> max(users, key=attrgetter('user_id')) User(99)
>>>

标签:原生,users,attrgetter,user,key,pythoy,排序,id,User
From: https://blog.51cto.com/u_16251183/8927316

相关文章

  • 【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
    [NOIP2007普及组]奖学金题目描述某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前名学生发奖学金。期末,每个学生都有门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规......
  • 排序
    排序快排,归并排序之前已经熟悉不再赘述计数排序复杂度O(n+m)计数排序适于值域范围较小的数字排序,核心思想:每个数字出现几次统计完每个元素出现次数后,求一边前缀和,就知道了每个数字排完序后的序列中出席拿的为止的范围(第几小到第几小都是这个数字)把数字填入相应为止保......
  • 蜘点云原生之 KubeSphere 落地实践过程
    公司平台介绍蜘点成立于2016年4月,致力于打造社区电商业务(解决最后3公里的配送问题)。当初通过自建直营渠道、自建仓库、自建大型社区仓、和采用加盟仓的方式,实现在社区的电商业务的发展,配送本地化。最多的时候在全国各个省都有分公司及下属子公司,在每个省都有省仓,在南北的主要......
  • java Page 实现根据字段名排序
    /***排序JSON格式*/@ApiModelProperty(value="排序JSON格式")privateStringorderBy;  @GetMapping("/page_manage")@ApiModelProperty(value="管理端用户管理分页",notes="管理端用户管理分页")publicRpageManage(Page<SysUser>page,......
  • 鸿蒙原生应用/元服务开发-Stage模型能力接口(九)上
    @ohos.app.ability.UIAbility(UIAbility)一、说明UIAbility是包含UI界面的应用组件,提供组件创建、销毁、前后台切换等生命周期回调,同时也具备组件协同的能力,组件协同主要提供如下常用功能。Caller,由startAbilityByCall接口返回,CallerAbility(调用者)可使用Caller与CalleeAbility(......
  • k8s Ingress使用详解(云原生kubernetes)
    k8s Ingress使用详解(云原生kubernetes)目录一、什么是Ingress二、Ingress工作机制三、Ingress核心概念四、Ingress工作原理五、Ingress使用搭建Ingress环境1、获取ingress-nginx2、创建ingress-nginx部署两组service创建tomcat-nginx.yaml配置Http访问代理如何通过外网......
  • 排序算法详解 C# 版
    概述一般使用的八大排序算法是:插入排序、选择排序、冒泡排序、希尔排序、归并排序、快速排序、堆排序、基数排序,每个方法有其适合的使用场景,可以根据具体数据进行选择.冒泡排序//冒泡排序,比较相临两个数的大小,如lst[i]>lst[i+1],则互换位置staticint[]Bu......
  • 火山引擎ByteHouse基于云原生架构的实时导入探索与实践
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群随着企业降本增效、智能化数据决策需求的增强,传统的商业数据库已经难以满足和响应快速增长的业务诉求。在此背景下,云原生数据库成为大势所趋。云原生数据库基于云平台构建、部署和分发,具有高可用......
  • 6-4 快速排序
    本题要求实现快速排序的一趟划分函数,待排序列的长度1<=n<=1000。函数接口定义: intPartition(SqListL,intlow,inthigh);其中L是待排序表,使排序后的数据从小到大排列。###类型定义: typedefintKeyType;typedefstruct{KeyType......
  • 原生、复杂流程操作、融合专家系统,澜码科技发布企业级Agent平台AskXBOT
    AI原生企业级Agent构建平台具备哪些特性?澜码AskXBOT平台揭晓答案澜码科技正式发布了AI原生企业级Agent平台AskXBOT,怎么看待这个产品?原生、复杂流程操作、融合专家系统,澜码科技发布企业级Agent平台AskXBOT企业真正需要的企业级AIAgent构建平台来了,澜码科技正式发布AskXBOT当......