• 14-python基础—python3中的defaultdict()


    1.collections.defaultdict 类

    from collections import defaultdict

    2.collections.defaultdict 类与工厂函数dict比较:

    (1) 众所周知,在Python中如果访问dict字典中不存在的键,会引发KeyError异常。但是有时候,字典中的每个键都存在默认值是非常方便的。defaultdict可以避免KeyError异常。

     1 # 1-dict()
     2 strings = ('puppy', 'kitten', 'puppy', 'puppy',
     3    'weasel', 'puppy', 'kitten', 'puppy')
     4 counts = {}
     5 for kw in strings:
     6  counts[kw] += 1
     7 
     8 # 报错
     9 #Traceback (most recent call last):
    10 # File "C:UserssummerDesktopdemo.py", line 5, in <module>
    11 #    counts[kw] += 1
    12 #KeyError: 'puppy'
    13 
    14 # 2-defaultdict()
    15 from collections import defaultdict
    16 
    17 strings = ('puppy', 'kitten', 'puppy', 'puppy',
    18    'weasel', 'puppy', 'kitten', 'puppy')
    19 counts = defaultdict(int)
    20 for kw in strings:
    21  counts[kw] += 1
    22 
    23 print(counts)
    24 
    25 # defaultdict(<class 'int'>, {'puppy': 5, 'kitten': 2, 'weasel': 1})

    (2)default_factory 接收一个工厂函数作为参数, 例如int str list set等.

    defaultdict类的初始化函数接受一个类型作为参数,当所访问的键不存在的时候,可以实例化一个值作为默认值默认值的类型由工厂函数决定。

    from collections import defaultdict
    
    dic1 = defaultdict(int)
    print(dic1['a'])
    
    dic2 = defaultdict(list)
    print(dic2['a'])
    
    dic3 = defaultdict(dict)
    print(dic3['a'])
    
    # 0
    # []
    # {}

    (3)返回的是工厂函数的实例,那么就具有了该工厂函数的相应方法。

  • 相关阅读:
    维护gcd的线段树 补发一波。。。
    BZOJ 4720: [Noip2016]换教室
    P2184 贪婪大陆 树状数组
    BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞
    POJ3280 Cheapest Palindrome 区间DP
    BZOJ 2288: 【POJ Challenge】生日礼物 堆&&链表
    BZOJ 4236: JOIOJI map瞎搞
    浅谈最近公共祖先(LCA)
    题解 BZOJ 1912 && luogu P3629 [APIO2010]巡逻 (树的直径)
    [笔记] 求树的直径
  • 原文地址:https://www.cnblogs.com/summer1019/p/11233783.html
Copyright © 2020-2023  润新知