zoukankan      html  css  js  c++  java
  • day2-字典

    一 概述

    字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔画,字母来查对应页的详细内容。

    字典的特性:

    • dict是无序的
    • key必须是唯一的

    二 语法

    语法

    info = {
        'stu1601': 'gangtiexia',
        'stu1602': 'zhizhuxia',
        'stu1603': 'jianbingxia'
    }

    三 基本用法

    1.增加

    >>> info = {
    ...     'stu1601': 'gangtiexia',
    ...     'stu1602': 'zhizhuxia',
    ...     'stu1603': 'jianbingxia'
    ... }
    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia'}
    >>> info['stu1605'] = '绿巨人'
    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia', 'stu1605': '绿巨人'}

    2. 修改

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia', 'stu1605': '绿巨人'}
    >>> info['stu1601'] = '钢铁侠'
    >>> info
    {'stu1601': '钢铁侠', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia', 'stu1605': '绿巨人'}

    3. 删除(del pop popitem)

    >>> info
    {'stu1601': '钢铁侠', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia', 'stu1605': '绿巨人'}
    >>> info.pop('stu1601') #标准删除姿势
    '钢铁侠'
    >>> info
    {'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia', 'stu1605': '绿巨人'}
    >>> del info['stu1602']  #换个删除姿势
    >>> info
    {'stu1603': 'jianbingxia', 'stu1605': '绿巨人'}
    >>> info.popitem()  #随机删除
    ('stu1605', '绿巨人')
    >>> info
    {'stu1603': 'jianbingxia'}

    4. 查找

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia'}
    >>> 'stu1601' in info #标准用法
    True
    >>> info.get('stu1602')  #获取
    'zhizhuxia'
    >>> info['stu1603']  #同上,但是看下面
    'jianbingxia'
    >>> info['stu1604']  #如果一个key不存在,报错,get不会,不存在只返回None
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'stu1604'

    5.多级字典嵌套及操作

    av_catalog = {
        "欧美":{
            "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
            "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
            "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
            "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
        },
        "日韩":{
            "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
        },
        "大陆":{
            "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
        }
    }
    
    av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
    print(av_catalog["大陆"]["1024"])
    #ouput 
    ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']

    四 其他用法

    1. values()

    以列表返回一个字典所有的值

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia'}
    >>> info.values()
    dict_values(['gangtiexia', 'zhizhuxia', 'jianbingxia'])

    2. keys()

    以列表返回一个字典所有的键

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia'}
    >>> info.keys()
    dict_keys(['stu1601', 'stu1602', 'stu1603'])

    3. setdefault(key, default=None)

    如果键不存在于字典中,将会添加键,并将值设为默认值;如果字典中包含给定的键,则返回该键对应的值

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia'}
    >>> info.setdefault('stu1601','钢铁侠') #存在的key
    'gangtiexia'
    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia'}
    >>> info.setdefault('stu1604','钢铁侠') #不存在的key
    '钢铁侠'
    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia', 'stu1604': '钢铁侠'}

    4.dict.update(dict2) 

    把字典dict2的键值对更新到dict里,合并两个字典

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': 'zhizhuxia', 'stu1603': 'jianbingxia', 'stu1604': '钢铁侠'}
    >>> b = {'stu1602':'蜘蛛侠','1':'2',3:4}
    >>> info.update(b) #把字典b的键值对更新到info里
    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': '蜘蛛侠', 'stu1603': 'jianbingxia', 'stu1604': '钢铁侠', '1': '2', 3: 4}

    5. items()

    以列表返回可遍历的(键,值)元组数组

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': '蜘蛛侠', 'stu1603': 'jianbingxia', 'stu1604': '钢铁侠', '1': '2', 3: 4}
    >>> info.items()
    dict_items([('stu1601', 'gangtiexia'), ('stu1602', '蜘蛛侠'), ('stu1603', 'jianbingxia'), ('stu1604', '钢铁侠'), ('1', '2'), (3, 4)])

    6. fromkeys(序列,默认值)

    初始化一个字典

    >>> dict.fromkeys(['a','b'],1)
    {'a': 1, 'b': 1}

    7. clear()

    清空字典

    >>> info
    {'stu1601': 'gangtiexia', 'stu1602': '蜘蛛侠', 'stu1603': 'jianbingxia', 'stu1604': '钢铁侠', '1': '2', 3: 4}
    >>> info.clear()
    >>> info
    {}

    5. 循环dict

    #方法1
    for key in info:
        print(key,info[key])
    
    #方法2
    for k,v in info.items(): #会先把dict转成list,数据量大时莫用
        print(k,v)

    小结:

    1. 方法1的效率比方法2的效率高很多
    2. 方法1是直接通过key取value
    3. 方法2是先把字典转换成一个列表,再去取值
    4. 当数据量比较大的时候,用第二种方法时,字典转换成列表的这个过程需要花大量的时间老转换,当然数据量不大,没有关系,效率差不多

    6. 知识扩展

    1. 合并两个字典的多种方法

    >>> dic1 = {'a':1,"b": 2}
    >>> dic2 = {'c':3,"d": 4}
    
    # 方法一
    >>> res = {}
    >>> res.update(dic1)
    >>> res.update(dic2)
    >>> res
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
    #方法二
    >>> def update(dic1,dic2):
    ...     for key, value in dic2.items():
    ...         dic1[key] = value
    ... 
    >>> update(dic1,dic2)
    >>> dic1
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
    #方法三
    >>> dic1 = {'a':1,"b": 2}
    >>> dic2 = {'c':3,"d": 4}
    >>> res3 = dict(dic1, **dic2)
    >>> res3
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
    #方法四
    >>> dic1 = {'a':1,"b": 2}
    >>> dic2 = {'c':3,"d": 4}
    >>> res4 = {**dic1, **dic2}
    >>> res4
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
  • 相关阅读:
    github上传本地项目
    vue.js form表单提交
    vue.js 数据交互 ajax
    锐浪报表字段分割
    前台与后台的数据交互(node.js与mysql)
    canvas标签__线段(新手随笔)
    canvas标签—矩形(新手随笔)
    项目显示页面思路(新手随笔)
    jQuery 属性(新手学习随笔)
    node.js 创建第一个应用
  • 原文地址:https://www.cnblogs.com/Easonlou/p/8136641.html
Copyright © 2011-2022 走看看