经验丰富程序员才知道的15种高级Python小技巧

本文将介绍15个简洁的Python技巧,向着简洁更高效,学习易懂出发。

1.通过多个键值将对象进行排序

假设要对以下字典列表进行排序:

people = [ 
{ 'name': 'John', "age": 64 }, 
{ 'name': 'Janet', "age": 34 }, 
{ 'name': 'Ed', "age": 24 }, 
{ 'name': 'Sara', "age": 64 }, 
{ 'name': 'John', "age": 32 }, 
{ 'name': 'Jane', "age": 34 }, 
{ 'name': 'John', "age": 99 }, 
]
复制代码

不仅要按名字或年龄对其进行排序,还要将两个字段同时进行排序。在SQL中,会是这样的查询:

SELECT * FROM people ORDER by name, age
复制代码

实际上,这个问题的解决方法可以非常简单,Python保证sort函数提供了稳定的排序顺序,这也意味着比较相似的项将保留其原始顺序。要实现按名字和年龄排序,可以这样做:

import operator 
people.sort(key=operator.itemgetter('age')) 
people.sort(key=operator.itemgetter('name'))
复制代码

要注意如何反转顺序。首先按年龄分类,然后按名字分类,使用operator.itemgetter()从列表中的每个字典中获取年龄和名字字段,这样你就会得到想要的结果:

[ 
{'name': 'Ed', 'age': 24}, 
{'name': 'Jane', 'age': 34}, 
{'name': 'Janet','age': 34}, 
{'name': 'John', 'age': 32}, 
{'name': 'John', 'age': 64}, 
{'name': 'John', 'age': 99}, 
{'name': 'Sara', 'age': 64} 
]
复制代码

名字是主要排序项,如果姓名相同,则以年龄排序。因此,所有John都按年龄分组在一起。

2.数据类别

自3.7版之后,Python开始能提供数据类别。比起常规类或其他替代方法(如返回多个值或字典),它有着更多优点:

  1. 数据类需要很少的代码
  2. 可以比较数据类,因为 eq 可以实现此功能
  3. 数据类需要类型提示,减少了发生错误的可能性
  4. 可以轻松打印数据类以进行调试,因为__repr__可以实现此功能

这是一个工作中的数据类示例:

from dataclasses import dataclass 
     @dataclass
     classCard: 
      rank: str
      suit: str
      card=Card("Q", "hearts") 
     print(card == card) 
     # True 
     print(card.rank) 
     # 'Q' 
     print(card) 
     Card(rank='Q', suit='hearts
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值