zoukankan      html  css  js  c++  java
  • Python中defaultdict方法的使用

    Python的字典是否有默认值?

    众所周知,在Python中如果访问字典中不存在的键,会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined)。但是有时候,字典中的每个键都存在默认值是非常方便的。例如下面的例子:

    strings = ('puppy', 'kitten', 'puppy', 'puppy', 'weasel', 'puppy', 'kitten', 'puppy') counts = {} 
    for kw in strings: 
        counts[kw] += 1

    该例子统计strings中某个单词出现的次数,并在counts字典中作记录。单词每出现一次,在counts相对应的键所存的值数字加1。但是事实上,运行这段代码会抛出KeyError异常,出现的时机是每个单词第一次统计的时候,因为Python的dict中不存在默认值的说法。

    为了解决上述问题,我们可以先加个判断语句,若key不存在,则其value值设为1:

    strings = ('puppy', 'kitten', 'puppy', 'puppy',
               'weasel', 'puppy', 'kitten', 'puppy')
    counts = {}
    
    for kw in strings:
        if kw not in counts:
            counts[kw] = 1
        else:
            counts[kw] += 1

    同样也可以利用setdefault的方法来设置默认值:

    strings = ('puppy', 'kitten', 'puppy', 'puppy',
               'weasel', 'puppy', 'kitten', 'puppy')
    counts = {}
    
    for kw in strings:
        counts.setdefault(kw, 0)
        counts[kw] += 1

    还有一种方法来对字典进行初始化操作——defaultdict

    defaultdict类就好像是一个dict,但是它是使用一个类型来初始化的:

    >>> from collections import defaultdict
    >>> d = defaultdict(list)
    >>> d['k1']
    []
    >>> d
    defaultdict(<class 'list'>, {'k1': []})
    >>> d['k2']='kobe'
    >>> d
    defaultdict(<class 'list'>, {'k1': [], 'k2': 'kobe'})
    >>> d['k3'].append('lebron')
    >>> d
    defaultdict(<class 'list'>, {'k1': [], 'k2': 'kobe', 'k3': ['lebron']})
  • 相关阅读:
    台州 OJ 3847 Mowing the Lawn 线性DP 单调队列
    洛谷 OJ P1417 烹调方案 01背包
    快速幂取模
    台州 OJ 2649 More is better 并查集
    UVa 1640
    UVa 11971
    UVa 10900
    UVa 11346
    UVa 10288
    UVa 1639
  • 原文地址:https://www.cnblogs.com/sunny0824/p/13498696.html
Copyright © 2011-2022 走看看