主题内容不是很好描述,就通过下面的例子来说明下我们经常遇到KeyError报错.  

文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,请到原文地址查看更新。

http://xiaorui.cc/2016/01/31/%E4%BD%BF%E7%94%A8__getitem__%E9%AD%94%E6%B3%95%E5%87%BD%E6%95%B0%E5%AE%9E%E7%8E%B0%E5%A4%9A%E5%B1%82%E5%B5%8C%E5%A5%97%E5%AD%97%E5%85%B8dict/

对, 就是这个使用python字典时常常遇到的KeyError问题…    当你要实现一个比较复杂的字典,含有各种嵌套层,比如 xiaorui['a']['b']['c'] = “ok”, 要往c写值前要确认a b是否有,要不然会报错的.  除了写入数据之外,读取字典同样会遇到这类似的问题,get只能获取最近一层key,不能获取嵌套的字典key。  

那么怎么解决? 难度我们要一层层的判断字典?  

我们可以设计一个继承了dict的类,实现的方法也很是简单,只要使用__getitem__魔法函数就可以模拟友好的字典。     


python2.7的collections有个defaultdict类,他的实现跟上面类似,多加了一些废话方法而已.


老规矩 ! 下面我们来瞅瞅collections defaultdict的源码. 

对于数据格式很是混乱, 很是蛋疼的时候还是挺适合用这种友好的字典模式,如果对于数据格式的需求比较认真,那还是用普通的字典吧.     就比如为什么有很多人喜欢nosql里的mongodb,因为他的bson格式很是随意,但是这样会代码业务bug的产生…   当然还是看人,看业务…

END.



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品