• Python关于使用dict的一些小技巧


    上周组里的同事分享了一些Python中使用dict的技巧,有一些自己之前也不太了解,在此分享一下。

    1.使用itervalues/iteritems

    Python 2中,dict的keys、values、items等方法会复制一个列表并返回,对应的iterkeys、itervalues、iteritems函数返回的是迭代器。因此从效率上来看,当dict的内容很多时,用keys、values、items这些方法就会非常耗时,建议此时使用iterkeys、itervalues、iteritems这类方法。
    但是,如果要在迭代过程中改变内容的话,应优先考虑使用不带iter的版本,另外要注意新添加的字典项是不会遍历到的。

    2.不使用iterkeys

    对字典迭代时,默认就是对它的key迭代,因此其实没有必要使用iterkeys(否则还要额外调用函数、生成迭代器,浪费时间)。
    另外判断一个key是否在字典中,用if key in dict足以(O(1)复杂度),如果用if key in dict.iterkeys反而会有O(N)的复杂度,浪费时间。

    3.关于get/pop的使用

    引用或删除字典中的值,最快的方式还是d[key]/ del d[key]。d.get(key, default)/ d.pop(key, default)的速度要远远慢于前者。因此在确认这个key在字典中时,就应当使用d[key]/ del d[key],这相当于自带一次assert。
    只有当前字典中可能没有这个key的时候,才用get/pop来获取(或者直接用in判断也可以)。

    4.取字典中的一个元素

    字典的key是不带顺序的,因此我们就取第一个元素。
    比较简单的写法是这样:

    v = d.values()[0]
    

    这样会构建一个列表,比较浪费时间。其实最省的写法是这样的:

    v = next(d.itervalues())  # 字典为空时报错
    v = next(d.itervalues(), None)  # 字典为空时返回None
    

    5.OrderedDict

    dict是不带顺序的,如果想有顺序,就要用OrderedDict,dict有的功能它都有,dict没有的它也有,使用OrderedDict会根据放入元素的先后顺序进行排序。
    假设有一个list,元素都是可哈希的,我想让对它去重可以转为set再转回list;如果还想保持顺序的话,就可以利用字典的fromkeys函数以及OrderedDict的有序性了:

    from collections import OrderedDict
    my_list = ['cat', 'dog', 'cat', 'mouse', 'dog', 'sheep', 'pig', 'pig', 'dog']
    my_new_list = list(OrderedDict.fromkeys(my_list))
    print my_new_list  # ['cat', 'dog', 'mouse', 'sheep', 'pig']
    

    如果要按最后一次出现的顺序,可以这么写:

    my_new_list2 = list(reversed(OrderedDict.fromkeys(reversed(my_list)))
    print my_new_list2  # ['cat', 'mouse', 'sheep', 'pig', 'dog']
    
  • 相关阅读:
    Hibernate学习笔记
    Oracle12c 在windonServer2012中安装的步骤
    提升tomcat服务器性能的七条经验
    zyUpload---照片上传并显示效果
    js的隐含参数(arguments,callee,caller)使用方法
    js中callback.call()和callback()的区别
    理解javascript中的回调函数(callback)
    Spring MVC 流程图
    JDBC在springMvc等框架中使用的方式
    为IE8添加EventListener系列方法支持
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/13836245.html
Copyright © 2020-2023  润新知