delphi webbrowser 对象不支持_【Python 秘籍】排序不支持原生比较的对象
问题
你想排序类型相同的对象,但是他们不支持原生的比较操作。
解决方案
内置的 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() 函数作用于字典类型很类似(参考上篇帖子)。 例如,如果 User 实例还有一个 first_name 和 last_name 属性,那么可以像下面这样排序:
`by_name = sorted(users, key=attrgetter('last_name', 'first_name'))`
同样需要注意的是,这一小节用到的技术同样适用于像 min() 和 max() 之类的函数。比如:
>>> min(users, key=attrgetter('user_id'))User(3)>>> max(users, key=attrgetter('user_id'))User(99)>>>
>>> min(users, key=attrgetter('user_id'))User(3)>>> max(users, key=attrgetter('user_id'))User(99)>>>
delphi webbrowser 对象不支持_【Python 秘籍】排序不支持原生比较的对象相关推荐
- snmpset对象不可写_[Python]可变对象与多进程通信
一.可变对象与不可变对象 参考Python 的函数是怎么传递参数的? 具体看文档就行了,这里引用文章的结论: 1.对于不可变对象作为函数参数,相当于C系语言的值传递: 2.对于可变对象作为函数参数,相 ...
- python对象的生命周期_(python)通过一个代码例子来分析对象的生命周期 | 学步园...
最近在学习python,看的是<简明python教程>,写的很是通俗易懂. 在一个类和对象的变量的例子中,看到代码运行结果突然想到在python中对象的生命周期的问题,代码运行结果: #! ...
- python对象的生命周期_(python)通过一个代码例子来分析对象的生命周期
最近在学习python,看的是<简明python教程>,写的很是通俗易懂. 在一个类和对象的变量的例子中,看到代码运行结果突然想到在python中对象的生命周期的问题,代码运行结果: #! ...
- java 对象排重_现代化的 Java (八)——重说对象序列化
事故 昨晚上准备把 sequences 服务扔到我的旧笔记本上然后写下单系统,然后发现一个很囧的事情-- 消息序列化竟然失败了. 翻过去的代码,逐个排除问题,基本上结论是:因为过去我的测试写的太简单, ...
- mysql未将对象引用设置到对象的实例_记一次未将对象引用设置到对象的实例问题的排查过程...
最近在给一个老项目做数据对接接口. 背景一 该项目最后更新日期为2006年,使用ASP.NET WebForm..Net2.0.OJB.Castle Avtive Record等.由于是某集团的子系统 ...
- calc ie支持_让IE6/IE7/IE8支持CSS3属性的8种方法介绍
让IE6/IE7/IE8支持CSS3属性的8种方法介绍 发布时间:2013-09-23 10:43:06 作者:佚名 我要评论 IE浏览器暂不支持CSS3的一些属性.国外的工程师们,不安于此现 ...
- word2013插入excel对象报错_修改Word文档中嵌入的Excel对象
I need example code or even a 3rd party object that will allow me to get to an excel object embedded ...
- unc 目录不受支持_[Bat]UNC路径不支持的2种解决方法
UNC(Universal Naming Convention),\\servername\sharename,其中servername是服务器名.sharename是共享资源的名称 1.使用push ...
- html 对象元素如何获取div 里的data值 原生和jq对象两种获取
这是对象,需要获取到div里的data-id的值 转成jq对象就行了 console.log($(t).data("id")) 2.打印一下当前元素: 获取当前事件元素: t.cu ...
- 小甲鱼python笔记_[Python]之前初学python,看小甲鱼视频的笔记(未整理)
BIF == Built-in functions (内置函数) 用冒号: 而不是分号: 001作业 0.Python是一种面向对象的脚本语言. 1.IDLE是python的一个shell. 2.输出 ...
最新文章
- 白话JAVA守护线程
- FORK()子进程对父进程打开的文件描述符的处理
- 如何利用计算机网络辅助自己,如何借助计算机网络辅助大学英语写作教学.doc...
- 深入理解javascript原型和闭包(4)——隐式原型
- ASP.NET MVC3 中设置htmlAttribute
- 2.3.3单链表的双向链表
- CSS: 深入理解BFC和Margin Collapse (margin叠加或者合并外边距)
- 编程语言中,差、交、并、自然连接、选择、投影、笛卡尔积分别都是什么运算...
- 自动挡跑高速用S挡还是D挡? 回答
- L2-007. 家庭房产-PAT团体程序设计天梯赛GPLT
- 小数分频器vhdl实现_verilog 实现小数分频(小数分频器)代码
- 微信检测器 微信过滤工具
- Android 后台保活,这里有你需要的所有姿势。2019,最新版本。
- python如何将两个list合并成字典_怎么把两个列表合并成字典 论Python怎样将两个list合并为一个字典...
- LeedCode 241. Different Ways to Add Parentheses
- Typora更新版本后要收费
- 领域模型和领域对象的概念
- STM32开发项目:STM32F407的BootLoader程序
- 微信小程序-底部导航栏
- VC中一个关于宏的使用问题 A2W W2A
热门文章
- 计算机科学与技术真的会掉头发吗,大学“最辛苦”的三个专业,“脱发率”很高,毕业后却都很吃香!...
- jittor和pytorch生成网络对比之acgan
- [ 一起学React系列 -- 11 ] React-Router4 (1)
- TCP/IP记一次关于IP地址和MAC物理地址的思考
- poj3264 - Balanced Lineup(RMQ_ST)
- 【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)
- su 和su -的区别
- user-select介绍
- AS3.0(3)-函数;类;对象
- 【Vegas原创】SQL case when 用法