3 个超有用的 Python 编程小技巧
作者:迟业 发布时间:2022-12-02 20:32:03
标签:Python,编程,小技巧
目录
1、如何按照字典的值的大小进行排序
2、优雅的一次性判断多个条件
3、如何优雅的合并两个字典
1、如何按照字典的值的大小进行排序
我们知道,字典的本质是哈希表,本身是无法排序的,但 Python 3.6 之后,字典是可以按照插入的顺序进行遍历的,这就是有序字典,其中的原理,可以阅读 Python3.6 之后字典是有序的? 。
知道了这一点,就好办了,先把字典的键值对列表排序,然后重新插入新的字典,这样新字典就可以按照值的大小进行遍历输出。
代码如下:
>>> xs = {'a': 4, 'b': 3, 'c': 2, 'd': 1}
>>> for k,v in xs.items():#遍历字典
... print(k,v)
...
a 4
b 3
c 2
d 1
>>> new_order = sorted(xs.items(), key=lambda x: x[1]) #对字典的键值对列表排序
>>> new_xs = { k : v for k,v in new_order} #有序列表插入新的字典
>>> new_xs
{'d': 1, 'c': 2, 'b': 3, 'a': 4}
>>> for k,v in new_xs.items(): ##新字典的输出就是有序的
... print(k,v)
...
d 1
c 2
b 3
a 4
对列表的排序,你还可以使用如下方法:
>>> import operator
>>> sorted(xs.items(), key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
2、优雅的一次性判断多个条件
假如有三个条件,只要有一个为真就可以通过,也许你会这么写:
x, y, z = 0, 1, 0
if x == 1 or y == 1 or z == 1:
print('passed')
实际上,以下三种方法更加 Pythonic
if 1 in (x, y, z):
print('passed')
if x or y or z:
print('passed')
if any((x, y, z)):
print('passed')
最后一个用到了 Python
内置的方法 any()
,any
接受一个可迭代对象作为参数,比如列表或元组,只要其中一个为真,则 any() 方法返回真,
用法示例如下:
>>> any(['a',(2,4),3,True])
True
>>> any(['a',(2,4),3,False])
True
>>> any(['a',(),3,False])
True
>>> any(['',(),0,False])
False
>>> any(('a',(),3,False))
True
>>> any(('',(),0,False))
False
## 注意空的可迭代对象返回 False
>>> any(())
False
>>> any([])
False
>>> any('')
False
>>> any({})
False
与 any()
对应的,就是方法 all()
,只有全部为真,才为真,注意空的可迭代对象一直返回真。
>>> all(['a',(2,4),1,True]) //list都为"真"
True
>>> all(['a',(),1,True]) //list元素中有空tuple
False
>>> all(['a',(2,4),0,True])
False
>>> all(['a',(2,4),3,False])
False
## 注意空的可迭代对象返回 True
>>>all([])
True
>>> all(())
True
>>> all({})
True
>>> all('')
True
查看帮助文档,可以在解释器输入 help:
>>> help(all)
Help on built-in function all in module __builtin__:
all(...)
all(iterable) -> bool
Return True if bool(x) is True for all values x in the iterable.
If the iterable is empty, return True.
3、如何优雅的合并两个字典
操作符可以解包字典,这在合并字典时非常有用,比如:
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}
>>> z = {**x, **y}
>>> z
{'c': 4, 'a': 1, 'b': 3}
如果在 Python2.x 中,需要这么做:
>>> z = dict(x, **y)
>>> z
{'a': 1, 'c': 4, 'b': 3}
来源:https://juejin.cn/post/7039643600799399972


猜你喜欢
- 0 引言年中购物618大狂欢开始了,各大电商又开始了大力度的折扣促销,我们的小胖又给大家谋了一波福利,淘宝APP直接搜索:小胖发福利,每天领
- 一·json数据格式1.什么是jsonJSON是一种轻量级的数据交互格式。可以按照.JSON指定的格式去组织和封装数据
- auto-push-oss Action虽然在 Github 市场有推送 OSS 相关的 Action,但是我还是选择改造我运行了好多年的脚
- ASP+Access数据库的18条安全法则:1.首先,我们需要过滤所有客户端提交的内容,其中包括?id=N一类,另外还有提交的html代码中
- 代码伺候:先看如下代码:例1: message = Message.objects.filter(pk=message_id2)messag
- 概述Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案。Redis从它的许多竞争继承
- base64模块是用来作base64编码解码的。这种编码方式在电子邮件中是很常见的。它可以把不能作为文本显示的二进制数据编码为可显示的文本信
- ->基础环境Linux:ubuntu 16.04Python ; 2.7->修改hostname1:$sudo hostname
- 在工作中,我们经常会写出这种代码:import MHeader from '../../components/m-header/m-
- 问题:pycharm无法调用pip安装的包原因:pycharm没有设置解析器解决方法:打开pycharm->File->Sett
- 实现多表更新,尤其是A表和A的子表B表数据更新,下面是例子有A、B张表,其记录如下:A表c1
- Oracle关系型数据库管理系统是世界上流行的关系数据库,它是一个极其强大、灵活和复杂的系统,据说,在使用oracle时应有这样的思想,那就
- ES6添加了Promise对象,成功时在then中处理,失败则在catch中处理,但有时候,我们需要在无论成功或失败时都要做一些事,比如隐藏
- 如下所示:<!DOCTYPE html><html><head lang="en">
- 1.什么是Javascript?Javascript是一种用于Web开发的编程语言。JavaScript在网络的客户端上运行。根据MDN,J
- 一、前言作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>&
- 关于什么是并发模型,我在这里引用 Go 语言联合创造者 Rob Pike 的一段话:并发是指一次处理多件事。并行是指一次做多件事。二者不同,
- 一、Python简介Python是一种面向对象的解释型计算机程序设计语言。Python是纯粹的自由软件, 源代码和解释器CPython遵循
- 废话不多说了,具体代码如下所示:<html><head>< >function selectAll(){
- 推荐系统MostPopular算法的Python实现MostPopular 算法的 是指对每个用户都选择出当前流行度最高的Top-K个物品进