今天分享 3 个 Python 编程小技巧,来看看你是否用过?
1、如何按照字典的值的大小进行排序
我们知道,字典的本质是哈希表,本身是无法排序的,但 Python 3.6 之后,字典是可以按照插入的顺序进行遍历的,这就是有序字典,其中的原理,可以阅读为什么 Python3.6 之后字典是有序的。
知道了这一点,就好办了,先把字典的键值对列表排序,然后重新插入新的字典,这样新字典就可以按照值的大小进行遍历输出。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
>>> 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 |
对列表的排序,你还可以使用如下方法:
1
2
3
|
>>> import operator >>> sorted (xs.items(), key = operator.itemgetter( 1 )) [( 'd' , 1 ), ( 'c' , 2 ), ( 'b' , 3 ), ( 'a' , 4 )] |
2、优雅的一次性判断多个条件
假如有三个条件,只要有一个为真就可以通过,也许你会这么写:
1
2
3
4
|
x, y, z = 0 , 1 , 0 if x = = 1 or y = = 1 or z = = 1 : print ( 'passed' ) |
实际上,以下三种方法更加 Pythonic
1
2
3
4
5
6
7
8
|
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() 方法返回真,用法示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
>>> 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()
,只有全部为真,才为真,注意空的可迭代对象一直返回真。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
>>> 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
:
1
2
3
4
5
6
7
8
9
|
>>> 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、如何优雅的合并两个字典
** 操作符可以解包字典,这在合并字典时非常有用,比如:
1
2
3
4
5
6
7
|
>>> x = { 'a' : 1 , 'b' : 2 } >>> y = { 'b' : 3 , 'c' : 4 } >>> z = { * * x, * * y} >>> z { 'c' : 4 , 'a' : 1 , 'b' : 3 } |
如果在 Python2.x 中,需要这么做:
1
2
3
|
>>> z = dict (x, * * y) >>> z { 'a' : 1 , 'c' : 4 , 'b' : 3 } |
以上就是3个 Python 编程技巧的详细内容,更多关于Python 编程技巧的资料请关注服务器之家其它相关文章!
原文链接:https://developer.51cto.com/art/202110/685478.htm