上面4个函数,虽然都知道具体的含义,但是有时候很少会想起来用这几个函数。用的恰到好处的话,确实使代码看起来更简洁易懂。
如果有个列表字典
dic1 = [{'a':'A'},{'b':'B'},{'d':'D'},{'c':'C'}]
想要把这个列表中的字典全部合并的话,可以用以下代码实现
b = dic1[0]
for i in range(1,4):b = dict(b,**dic1[i])
----------------------------------
如果用reduce,map和lambda函数结合就更简洁了
dic = {}
for i in map(lambda x:dic.update(x),dic1):print(dic)
out:
{
'a': 'A'}
{
'a': 'A', 'b': 'B'}
{
'a': 'A', 'b': 'B', 'd': 'D'}
{
'a': 'A', 'b': 'B', 'd': 'D', 'c': 'C'}如果用reduce就更加简洁,
dic = OrderedDict() #如果你想要输出是输入的顺序,字典是无序的,虽然上面的没有有序字典看似也是有序,但是我用不同的ide结果就是不同
reduce(lambda x,y:dic.update(y),dic1,{}) #from functools import reduce
out :
dic = {
'a': 'A', 'b': 'B', 'd': 'D', 'c': 'C'}
map(lambda x:dic.update(x),dic1)reduce和map函数接收的参数比较相似,接收一个函数和一个列表(reduce可以有第3个参数作为计算的初始的值,如果没有,就以list中的中的第一个元素作为x)。下面把reduce拆解就能明白了。
reduce(lambda x,y:dic.update(y),dic1,{})
==>
lambda x,y:dic.update(y) 其实就等于
def fun(x,y):return dic.update(y),x
所以,第一步执行x = {},y = dic1[0]代入到 fun({},dic1[0]) ,dic 就变成 {
'a': 'A'},然后在fun(fun({},dic1[0]),dic1[1]),一直计算到最后一个
#reduce( func, [1, 2,3] ) = func( func(1, 2), 3)
zip函数一般将2个列表合并
for i in zip([1,2,3],[4,5]):
print(i)
out:
(1, 4)
(2, 5)