zoukankan      html  css  js  c++  java
  • 字典 (dictionary) 的默认值

    字典 (dictionary) 的默认值

    摘录自《利用 Python 进行数据分析》第三版 3.1.4.2

    通常,如果想要获得字典里对应键的值,但是我们先前并不确定这个键是否存在于字典中的话,代码会这样写

    if key in some_dict:
        value = some_dict[key]
    else:
        value = default_value
    

    但是,字典的 get 方法和 pop 方法可以添加一个默认值的参数,使得上述的代码可以被简化为

    value = some_dict.get(key, default_key)
    

    带有默认值的 get 方法会在 key 参数不是字典的键时返回 None,而 pop 会抛出异常。

    再有这样一个场景,我们想将字词组成的列表根据首字母分类为包含列表的字典。通常来讲,我们会这样组织代码

    words=['apple', 'bat', 'bar', 'atom', 'book']
    by_letter = {}
    for word in words:
        letter = word[0]
        if letter not in by_letter:
            by_letter[letter] = [word]
        else:
            by_letter[letter].append(word)
    

    而使用字典的 setdefault 方法,如果键不存在于字典中,将会添加键并将值设为默认值。上面的代码可以简写为

    words=['apple', 'bat', 'bar', 'atom', 'book']
    by_letter = {}
    for word in words:
        letter = word[0]
        by_letter.setdefault(letter,[]).append(word)
    

    除此之外,内建的 collections 模块有一个 defaultdict 类,可以再将上述代码简化。

    想要生成符合要求的字典,可以向 defaultdict 中传入类型或能在各位置生成默认值的函数。

    from collections import defaultdict
    words=['apple', 'bat', 'bar', 'atom', 'book']
    by_letter = defaultdict(list)
    for word in words:
        by_letter[word[0]].append(word)
    
  • 相关阅读:
    MySQL-子查询,派生表,通用表达式
    MySQL-插入数据(INSERT)
    IDEA中如何使用debug调试项目 一步一步详细教程
    Java相对路径/绝对路径总结
    jsp九个内置对象、四个域对象及Servlet的三大域对象
    浅析MVC模式与三层架构的区别
    三层架构详解
    Java集合中List,Set以及Map等集合体系详解
    POJ3233 [C
    HDU 2829 [Lawrence] DP斜率优化
  • 原文地址:https://www.cnblogs.com/IvyWong/p/12210362.html
Copyright © 2011-2022 走看看