提升逼格的两个函数

在做 code review 的时候,发现有些同学的代码看起来不那么 pythonic,忍不住写篇短文介绍两个函数:setdefault 与 defaultdict。

有这样的需求,一个列表,里面是(key, value) 这样的键值对元组,要将它转换成一个字典对象,并将key相同的value作为一组。看代码:

下面这个方法是大家都能想到的,先判断result中有没有key,没有则为其初始化一个列表,有则直接将value值append到列表中。但这段代码在Python中不怎么优雅

setdefault

更优雅的方式就是使用setdefault方法,它是字典对象的一个实例方法,接收两个参数,用法和字典的方法类似,但是比 get 更强大。 它可以为给字典的key设定一个默认值(如果key不在字典中的时候)

定义

当然,内部具体实现肯定比上面的代码要高效。二者的区别是:L get 方法设置的默认值不会改变原字典, 而setdefault设置的默认值会改变原字典的值。

对比

所以,前面的需求就有了这种更优雅的写法:

defaultdict

defaultdict是属于collections 模块下的一个工厂函数,用于构建字典对象,接收一个函数(可调用)对象为作为参数。参数返回的类型是什么,key对应value就是什么类型。

参数为 list,它就会构建一个默认value为list的字典,例如result[‘a’]的值默认就是list对象。

因此,前面这段代码可以改为:

记住了吗?这两个函数一定要动手实践才会变成自己的东西哦。只看不做,徒劳无益

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181015B1G12S00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券