zoukankan      html  css  js  c++  java
  • python 关于dict的一些总结

    总结了一些关于字典的小技巧或者注意的地方。

    使用zip创建字典

    创建字典有以下三种方法

    dict(a=1, b=2, c=2)
    dict([(a,1), (b,2), (c,3)])
    dict({a:1, b:2, c:3})
    

    推荐使用第二种方法结合zip创建

    key = 'abcde'
    value = range(1, 6)
    dict(zip(key, value))
    

    使用iteritems来遍历字典

    d = dict(a=1, b=2, c=3)
    for k, v in d.iteritems():
        print k, v
    # a 1
    # c 3
    # b 2
    

    当然也可以使用items来遍历字典, 与之不同的是iteritems返回一个迭代器。

    d = dict(a=1, b=2, c=3)
    for k, v in d.items():
        print k, v
    # a 1
    # c 3
    # b 2
    
    In [69]: d.iteritems()
    Out[69]: <dictionary-itemiterator at 0x3f216d8>
    
    In [70]: d.items()
    Out[70]: [('a', 1), ('c', 3), ('b', 2)]
    
    

    使用get, pop来获取/删除key

    首先,dict[key] 与 delete dict[key]也可以获取/删除key。但是key不存在时,会引发 KeyError 异常。为了避免引发异常可以使用get和带defaut参数的pop

    • get(key[, default])
      如果key在字典中,返回对应的value, 否则返回default。所以从来不会引发异常。
    • pop(key[, default])
      如果default未设置,则如果key不在字典中,删除key将引发异常。使用时加上default。

    dict(dict1, **dict2)合并两个字典

    合并两个字典可以先把两个字典分成key-value对,再连接两个key-value对,生成新的字典。即 dict(dict1.items()+dict2.items()) 。不过效率有些低。
    使用效率更高的 dict(dict1, **dict2) 连接两个字典。

    In [29]: dict1
    Out[29]: {'a': 1, 'b': 2, 'c': 3}
    
    In [30]: dict2
    Out[30]: {'d': 4, 'e': 5, 'f': 6}
    
    In [31]: dict(dict1, **dict2)
    Out[31]: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
    
    
    $ python -m timeit -s 'dict1=dict2=dict(a=1,b=2)' 'dict3=dict(dict1,**dict2)'
    1000000 loops, best of 3: 0.573 usec per loop
    $ python -m timeit -s 'dict1=dict2=dict(a=1,b=2)' 'dict3=dict(dict1.items()+dict2.items())'
    100000 loops, best of 3: 2.21 usec per loop
    

    谨慎使用dict.copy()

    dict.copy()是一个浅拷贝,当遇到字典或者列表时,将不能完全拷贝。使用copy模块的deepcopy()方法。

    import copy
    
    dict1 = {'a': [1, 2], 'b': 3}
    dict2 = dict1
    dict3 = dict1.copy()
    dict4 = copy.deepcopy(dict1)
    
    dict1['b'] = 'change'
    dict1['a'].append('change')
    
    print dict1  # {'a': [1, 2, 'change'], 'b': 'change'}
    print dict2  # {'a': [1, 2, 'change'], 'b': 'change'}
    print dict3  # {'a': [1, 2, 'change'], 'b': 3}
    print dict4  # {'a': [1, 2], 'b': 3}
    
  • 相关阅读:
    JS校验 if (! temp_var) {} //拦截 ''和 undefined
    17 JQuery高级----学习笔记
    16 JQuery---JavaScript框架
    15 Filter过滤器和Listener监听器
    14 用户信息展示综合案例
    13 JSP、MVC开发模式、EL表达式和JSPL标签+软件设计架构---学习笔记
    12 Cookie、Session和JSP基础
    11 Reponse对象+ServletContext对象
    10 Servlet+Http+Request对象
    09 Servlet相关知识点---学习笔记
  • 原文地址:https://www.cnblogs.com/xianwang/p/4970448.html
Copyright © 2011-2022 走看看