补充知识,各种表达式的效果:
tasks = [
1,
2,
3
]
a = (i for i in tasks) #这种情况生成的是生产器,可以用来迭代
b = [i for i in tasks] #生成的是列表
c = {i for i in tasks} #这种情况下生成的是set (很意外吧)
d = {i:1 for i in tasks} #这种情况下生成的是字典
print(type(a))
print(type(b))
print(type©)
print(type(d))
运行结果:
其实在我们的工作开发过程中是有很多的时候出现字典列表,或者字典多层嵌套,而此时我们就是在遍历,代码写的冗长,而现在其实我们是有别的办法的。
ChainMap
ChainMap主要是将多个字典组合在一起,然后进行操作
In [6]: a = {“x”:1, “z”:3}
In [7]: b = {“y”:2, “z”:4}
In [8]: c = ChainMap(a, b)
In [9]: c
Out[9]: ChainMap({‘z’: 3, ‘x’: 1}, {‘z’: 4, ‘y’: 2})
n [10]: c[“z”]
Out[10]: 3
In [11]: c[“z”] = 4
#只会读写第一个字典里面的值
In [12]: c
Out[12]: ChainMap({‘z’: 4, ‘x’: 1}, {‘z’: 4, ‘y’: 2})
In [13]: c.pop(‘z’)
Out[13]: 4
In [14]: c
Out[14]: ChainMap({‘x’: 1}, {‘z’: 4, ‘y’: 2})
In [28]: c.maps
Out[28]: [{‘x’: 1}, {‘y’: 2, ‘z’: 4}
实际使用:
combined = ChainMap(command_line_args, os.environ, defaults)
优先读取本地变量,然后全局变量,最后默认变量
将很多数据进行汇合使用
message = dict(ChainMap({‘score’: score}, body.detail, black_info))
defaultdict
defaultdict这个对象很方便的在构造字典,而字典的值默认会加载某种方法,
目前已知的方法有list,set,int
s = [(‘red’, 1), (‘blue’, 2), (‘red’, 3), (‘blue’, 4), (‘red’, 1), (‘blue’, 4)]
a = defaultdict(int) 将值默认设置为int
for k, v in s:
a[k] += 1
print(a)
defaultdict(
a = defaultdict(list)
for k, v in s:
a[k].append(v)
print(a)
defaultdict(
a = defaultdict(set)
for k, v in s:
a[k].add(v)
print(a)
#defaultdict(
namedtuple() 命名元组的工厂函数
namedtuple() 命名元组的工厂函数
from collections import namedtuple
Friend=namedtuple(“Friend”,[‘name’,‘age’,‘email’])
f1=Friend(‘xiaowang’,33,‘[email protected]’)
print(f1)
print(f1.age)
print(f1.email)
f2=Friend(name=‘xiaozhang’,email=‘[email protected]’,age=30)
print(f2)
name,age,email=f2
print(name,age,email)
执行效果:
Friend(name=‘xiaowang’, age=33, email=‘[email protected]’)
33
[email protected]
Friend(name=‘xiaozhang’, age=30, email=‘[email protected]’)
xiaozhang 30 [email protected]