今天分享 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