zoukankan      html  css  js  c++  java
  • Python 极简教程(十一)字典 dict

    字典是以大括号标识,以键值对(key:value)的形式,无序,不可重复,可变的集合类型。
    字典具有非常高效的读写效率。

    >>> d = {}    # 创建一个空字典
    >>> d1 = {'name':'张三', 'age':30, 'fond':'睡觉'}      # 创建字典
    >>> d2 = dict(name='李四', age=15, fond='吃喝')    # 也可以通过 dict() 创建
    >>> d1
    {'name': '张三', 'age': 30, 'fond': '睡觉'}
    >>> d2
    {'name': '李四', 'age': 15, 'fond': '吃喝'}
    

    字典的 key,必须是不可变的数据类型(int,str,tuple等),列表是不能作为 key 的。当然一般情况下,我们都是使用字符串作为 key 值。
    字典的 value,可以是任意的数据类型。

    字典操作

    取值

    取值与列表类似,只是不再使用索引,而是使用 key:

    >>> d = {
        'name': '张三',
        'age': 30,
        'fond': ['睡觉', '上网', '游戏'],
        'job': {
            'company': '小满科技',
            'position': '软件测试'
        }
    }
    >>> d['name']
    '张三' 
    # 获取张三的第二个爱好
    >>> d['fond'][1]      # 读取字典中列表的元素,先读取该列表,再按列表取值取
    '上网'
    # 获取张三的职位
    >>> d['job']['position']    # 读取字典中的字典,先读取子字典,再读取字典中的内容
    '软件测试'
    

    改值与加值

    字典中改值与列表写法类似。也是用 key 代替索引。
    字典的加值呢,和改值写法一样,区别是当 key 存在的时候是改值,不存在的时候就是加值。

    >>> person = {'name':'张三', 'age':30, 'fond':'睡觉'} 
    # 改值
    >>> person['age'] = 20
    # 如果 key 不存在就是加值
    >>> person['height'] = 170 
    >>> person 
    {'name': '张三', 'age': 20, 'fond': '睡觉', 'height': 170}
    

    字典常用内置方法

    方法 说明
    get(key, default) 按 key 取值,如果 key 不存在,则返回 default 的值
    items() 以列表返回可遍历的(键, 值) 元组对
    keys() 以列表返回字典所有的键
    values() 以列表返回字典所有的值
    pop(key) 删除并返回指定key的值
    setdefault(key,default=None) 和get()类似,但如果键不存在于字典中,将会添加键并将值设为default
    fromkeys(seq) 创建一个新字典,以序列seq中元素做字典的键
    update(dict2) 把字典dict2的键/值对更新到dict里
    clear() 删除字典内所有元素
    copy() 返回一个字典的浅复制

    1. get(key, default) 取值

    按 key 取值,如果 key 不存在,则返回 default 的值。该方法也是一个取值方法,和通过 d[key] 取值方式的区别在于:

    d[key] 取值方式,如果 key 不存在,会报错。而通过 get 方法取值则不会报错,默认返回 None, 如果指定 default 的值,则返回 default 的值。

    >>> job = {
            'company': '小满科技',
            'position': '软件测试'
        }
    >>> job['salary']    # key 值 'salary' 不存在
    KeyError: 'salary'    # 报 KeyError 错误
    >>> print(job.get('salary'))      # 用 get 方法则返回 None,而不会报错
    None
    >>> job.get('salary', 5000)      # 如果加了默认值,则返回设置的默认值,这里设置的 5000
    5000
    

    2. 以列表返回字典元素

    items() 该方法主要用于字典的遍历,以元组的形式返回字典的键值对。
    keys() 以列表返回字典所有的键
    values() 以列表返回字典所有的值

    ```python
    >>> job = {
            'company': '小满科技',
            'position': '软件测试'
        }
    >>> job.items()    # 返回的是一个可遍历的对象
    dict_items([('company', '小满科技'), ('position', '软件测试')])
    >>> list(job.items())      # 如果想完全按照列表操作,需要用 list 转换
    [('company', '小满科技'), ('position', '软件测试')]
    >>> job.keys()
    dict_keys(['company', 'position'])
    >>> job.values()
    dict_values(['小满科技', '软件测试'])
    
    # 字典的成员运算
    # 字典的成员运算,只能是 key in dict
    # 如果想判断某个值是否在字典中,就必须用 dict.values() 方法
    >>> 'company' in job
    True
    >>> '软件测试' in job
    False
    >>> '软件测试' in job.values()
    True
    

    3. pop(key) 删除并返回指定key的值

    pop 方法用于删除字典中的某个键值对,参数为 key。删除后会返回被删除的 value 值。

    >>> job = {
            'company': '小满科技',
            'position': '软件测试'
        }
    >>> job.pop('company')
    '小满科技'
    >>> job
    {'position': '软件测试'}
    

    4. setdefault(key,default=None)

    setdefault 方法和 get 方法类似,但如果键不存在于字典中,将会添加键并将值设为default。

    >>> job = {
            'company': '小满科技',
            'position': '软件测试'
        }
    >>> job.setdefault('company', 10000)    # key 存在就取出对应的 value 值
    '小满科技'
    >>> job.setdefault('salary', 10000)    # key 不存在,会添加一个键值对
    10000
    >>> job
    {'company': '小满科技', 'position': '软件测试', 'salary': 10000}
    

    5. update(dict2) 追加字典

    把字典dict2的键值对更新到dict里。

    >>> d1 = {'a':1, 'b':2}
    >>> d2 = {'x':True, 'y':False}
    >>> d1.update(d2)
    >>> d1
    {'a': 1, 'b': 2, 'x': True, 'y': False}
    

    6. clear() 清空字典

    删除字典内所有元素。

    >>> d = {'a':1, 'b':2}
    >>> d.clear()
    >>> d
    {}
    

    7. copy() 复制字典

    该方法返回一个字典的浅复制 。关于浅复制的概念请参考 浅复制与深复制的区别

  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/zmll/p/10611238.html
Copyright © 2011-2022 走看看