0%

Python小技巧(1)--基本数据结构与算法

基本数据结构与算法----来源于cookbook第一章

记录第一章中比较有意思的部分


元素分解

通过*表达式来解包裹实现分解

1
2
3
4
5
6
l = [1,2,3,4,(5,6,7)]

first, *_, (*__, last) = l

print(first,last) # 1 7

将字典的键映射到多个值上

  • 通过使用collections中的defaultdict来实现一键多值字典

  • 通过dict类的setdefault方法来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 方法一

from collections import defaultdict

d = defaultdict(list) # 或defaultdict(set)
d['a'].append(1)
d['a'].append(2)
d['b'].append(3)
print(d) # {'a': [1, 2], 'b': [3]}


# 方法二

d = {}
d.setdefault('a',[]).append(1)
d.setdefault('a',[]).append(2)
d.setdefault('b',[]).append(1)
print(d) # {'a': [1, 2], 'b': [3]}

两个字典的集合运算

字典支持集合运算符,可以对其求交集、并集等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

a = {
'x' : 1,
'y' : 2,
'z' : 3
}

b={
'x' : 10,
'w' : 11,
'z' : 3
}

print(a.keys() & b.keys()) # {'z', 'x'}
print(a.keys() - b.keys()) # {'y'}
print(a.items() & b.items()) # {('z', 3)}

字典推导式

感觉字典推导式不如生成器推导式和列表推导式用的多

1
2
3
4
5
6
7
8
9
10

prices = {
'a' : 45,
'b' : 32,
'c' : 10
}

p1 = {key:value for key,value in prices.items() if value >20}
print(p1) # {'a': 45, 'b': 32}