导读:在做 code review 的时候,发现有些同学的代码看起来不那么 pythonic,忍不住写篇短文介绍两个函数:setdefault 与 defaultdict。
作者:志军100
有这样的需求,一个列表,里面是(key, value) 这样的键值对元组,要将它转换成一个字典对象,并将key相同的value作为一组。看代码:
下面这个方法是大家都能想到的,先判断result中有没有key,没有则为其初始化一个列表,有则直接将value值append到列表中。但这段代码在Python中不怎么优雅:
01 setdefault
更优雅的方式就是使用setdefault方法,它是字典对象的一个实例方法,接收两个参数,用法和字典的get方法类似,但是比 get 更强大。 它可以为给字典的key设定一个默认值(如果key不在字典中的时候):
1. 定义
当然,内部具体实现肯定比上面的代码要高效。二者的区别是:L get 方法设置的默认值不会改变原字典, 而setdefault设置的默认值会改变原字典的值。
2. 对比
所以,前面的需求就有了这种更优雅的写法:
02 defaultdict
defaultdict是属于collections 模块下的一个工厂函数,用于构建字典对象,接收一个函数(可调用)对象为作为参数。参数返回的类型是什么,key对应value就是什么类型。
参数为 list,它就会构建一个默认value为list的字典,例如result[‘a’]的值默认就是list对象。
因此,前面这段代码可以改为:
记住了吗?这两个函数一定要动手实践才会变成自己的东西哦。只看不做,徒劳无益。
据统计,99%的大咖都完成了这个神操作
▼
领取专属 10元无门槛券
私享最新 技术干货