使用defaultdict为字典设置默认值

作者: 码农小杨 | 来源:发表于2018-01-18 11:48 被阅读13次

    defaultdict 是使用C语言写的一个类,因此性能也是很高

    from collections import defaultdict
    

    传统统计一个列表中元素重复次数

    user_dict = {}
    user_list = ['hongshaorou1', 'hongshaorou2', 'hongshaorou2', 'hongshaorou3', 'hongshaorou1']
    for user in user_list:
        if user not in user_dict:
            user_dict[user] = 1
        else:
            user_dict[user] += 1
    

    我们可以使用setdefault简化代码,setdefault可以为不存在的键设置默认值
    使用setdefault比上面的方法要高效,因为少做了一次查询

    for user in user_list:
        user_dict.setdefault(user, 0)
        user_dict[user] += 1
    

    我们先看一下defaultdict的特性

    # In [1]: from collections import defaultdict
    #
    # In [2]: default_dict = defaultdict(int)
    #
    # In [3]: default_dict['hongshaorou']
    # Out[3]: 0
    

    我们使用defaultdict函数可以为不存在的键赋默认值,可以是list对应[],也可以是int对应0
    defaultdict函数的传入的是可调用对象: list,int,dict
    增加了代码严谨性,便于初始化

    使用defaultdict完成计数

    default_dict = defaultdict(int)
    for user in user_list:
        default_dict[user] += 1
    

    如果我们想直接在defaultdict函数里面初入带值的的dict是不允许的

    group_dict = {
        "group1": {
            "name": "",
            "nums": 0
        }
    }
    

    我们可以使用方法,返回想要默认填充的字典值,因为方法面也是可调用对象

    def gene_default():
        return {
            "name": "",
            "nums": 0
        }
    
    default_dict = defaultdict(gene_default)
    default_dict["group1"]
    

    相关文章

      网友评论

        本文标题:使用defaultdict为字典设置默认值

        本文链接:https://www.haomeiwen.com/subject/qanioxtx.html