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']})
  • 相关阅读:
    经典管理定理6条
    从《乔家大院》悟企业留人
    大型Web2.0站点构建技术初探(转)
    从《投名状》谈创业如何“兄弟”共赢
    web2.0站点的考虑
    如何管理很“牛”的员工?
    五种提高 SQL 性能的方法
    破译犹太商人成功密码
    通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建
    业务员的3个经典故事
  • 原文地址:https://www.cnblogs.com/sunny0824/p/13498696.html
Copyright © 2011-2022 走看看