zoukankan      html  css  js  c++  java
  • Python

    字典简介

    • 字典在 Python 里面是非常重要的数据类型,而且很常用
    • 字典是以关键字(键)为索引,关键字(键)可以是任意不可变类型
    • 字典由键和对应值成对组成,字典中所有的键值对放在 { } 中间,每一对键值之间用逗号分开

    字典栗子

    var = {'a': 'A', 'b': 'B', 'c': 'C'}

    字典中包含 3 个键值对

    • 键 ‘a’ 的值是 ‘A’
    • 键 ‘b’ 的值是 ‘B’
    • 键 ‘c’ 的值是 ‘C’

    字典通常用于描述对象的各种属性

    例如一本书,有书名、作者名、出版社等各种属性,可以使用字典描述如下

    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }

    键的取值规则

    • 可以是任意不可变类型
    • 通常是字符串或数字
    • 如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作键
    • 但如果元组直接或间接地包含了可变对象,那么它就不能用作键
    • 列表不能用作键

    声明一个空字典

    # 空字典
    dict_ = {}
    print(dict_,type(dict_))
    
    dict_ = dict()
    print(dict_,type(dict_))
    
    
    # 输出结果
    {} <class 'dict'>
    {} <class 'dict'>

      

    读取字典

    两种方式

    • 通过索引 [ key ]
    • 通过 .get(key) 方法  
    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }
    
    print(book["title"])
    print(book["author"])
    print(book.get("press"))
    print(book.get("a")) 

    两种方式有啥区别?

    • .get(key) 当 key 不存在的时候会返回 None
    • [ key ] 如果 key 不存在则会报错  KeyError: 'authors' 

    修改字典

    两种方式

    • 通过索引 [ key ] 赋值
    • 通过 .update() 方法
    # 修改字典
    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }
    
    book["author"] = "小菠萝"
    print(book)
    
    book.update({"title": "新书"})
    print(book)
    
    
    # 输出结果
    {'title': 'Python 入门基础', 'author': '小菠萝', 'press': '机械工业出版社'}
    {'title': '新书', 'author': '小菠萝', 'press': '机械工业出版社'}

    在字典中增加键值对

    # 新加键值对
    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }
    book["money"] = 22
    print(book)
    
    
    # 输出结果
    {'title': 'Python 入门基础', 'author': '张三', 'press': '机械工业出版社', 'money': 22}

    在字典中删除键值对

    两种方式

    • 通过关键字 del
    • 通过 .pop(key)
    # 删除键值对
    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }
    
    del book["press"]
    print(book)
    
    print(book.pop("author"))
    print(book)
    
    
    # 输出结果
    {'title': 'Python 入门基础', 'author': '张三'}
    张三
    {'title': 'Python 入门基础'}

    查询字典

    通过关键字 in 检查字典中是否包含指定

    # in
    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }
    
    print("title" in book)
    print("titles" in book)
    print("张三" in book)
    
    
    # 输出结果
    True
    False
    False

    常见函数

    len

    获取字典中键值对的数量

    # len
    var = {'a': 'A', 'b': 'B', 'c': 'C'}
    print(len(var))
    
    
    # 输出结果
    3

    list

    返回包含该字典中所有键的列表

    # list
    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }
    print(list(book))
    
    
    # 输出结果
    ['title', 'author', 'press']
    • 这个返回结果是无序
    • tuple() 一样也可以这样哦,返回的是键组成的元组

    sorted

    返回包含该字典中所有键的有序列表

    # sorted
    book = {
        'title': 'Python 入门基础',
        'author': '张三',
        'press': '机械工业出版社'
    }
    print(sorted(book))
    
    
    # 输出结果
    ['author', 'press', 'title']

    dict() 创建字典对象详解

    重点

    dict 是一个类,而不是函数

    源码

    从源码注释来看,dict 有四种传参方式,下面将一一举例

    创建空字典

    # 创建空字典
    dict1 = dict()
    print(dict1)
    
    
    # 输出结果
    {}

    通过 iterable 创建字典

    # 传递 list 来创建字典
    mid = [("a", 1), ("b", 2)]
    dict2 = dict(mid)
    print(dict2)
    
    
    # 输出结果
    {'a': 1, 'b': 2}

    iterable 的详解:https://www.cnblogs.com/poloyy/p/14658433.html

    通过关键字参数创建字典

    # 传递关键字参数来创建字典
    dict3 = dict(name="yy", age=24)
    print(dict3)
    
    
    # 输出结果
    {'name': 'yy', 'age': 24}

    通过另一个字典对象创建字典

    mid = {"title": [1, 2, 3]}
    # 相当于浅拷贝
    dict4 = dict(mid)
    
    print(dict4)
    print(id(mid), id(dict4))
    
    mid["name"] = "test"
    mid["title"][1] = 1
    
    print(mid, dict4)
    
    
    # 输出结果
    {'title': [1, 2, 3]}
    4498981760 4500413824
    {'title': [1, 1, 3], 'name': 'test'} {'title': [1, 1, 3]}

    这种传参方式相当于浅拷贝,新的字典对象和旧的字典对象并不指向同一个对象引用

    假设直接用赋值的方式,因为字典是可变对象,所以新旧字典对象都会指向同一个对象引用

    dict1 = {1: 1}
    dict2 = dict1
    print(id(dict1), id(dict2))
    
    
    # 输出结果
    4355281792 4355281792

    所以,当想复制一个新的字典对象但是又不想指向同一个对象引用的话,最好还是使用 dict() 的方式

    字典常见方法

    https://www.cnblogs.com/poloyy/p/15084264.html

    遍历字典的多种方式

    https://www.cnblogs.com/poloyy/p/15084302.html

  • 相关阅读:
    Linux Time_wait网络状态 调优
    Linux 系统开启随机端口数量 调优
    Linux 跟踪连接netfilter 调优
    Linux 文件时间记录属性 调优
    Linux 默认线程栈大小 调优
    Linux 系统开启最大线程数 调优
    Linux 系统级开启文件句柄 调优
    Linux 进程级开启最大文件描述符 调优
    参数优化-偏差与方差
    决策树-回归
  • 原文地址:https://www.cnblogs.com/poloyy/p/15083781.html
Copyright © 2011-2022 走看看