• PYTHON知识点学习-字典


    🌈write in front🌈
    🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
    🆔本文由 Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
    📝个人主页:Aileen_0v0🧸—CSDN博客
    🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
    📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
    🗼我的格言:"没有罗马,那就自己创造罗马~" 

    目录

    字典的介绍及创建

    字典查找key

    dictionary&list对比

    字典的新增修改删除

    理解字典操作的效率

    字典的遍历

    可哈希的类型


    字典的介绍及创建

    字典:是存储键值对的数据

    键(key)

    值(value)

    根据 key 能够快速找到 value  ( 映射关系 )

    例如: 学号 => 同学        名字 => 人

    在 python 的字典中,可以同时包含佷多个键值对.

    同时要求这些键,不能重复!

    1. #1.创建字典
    2. a = {}
    3. print(type(a))
    4. b = dict()
    5. print(type(b))
    1. #2.创建字典的同时设置初始值.
    2. a ={"id":1 , "name" : "zhangsan"}

     字典a中,包含两个键值对.

    (1)"id":1  key 就是"id",value 就是 1

    (2)"name":  "zhangsan"  key 就是"name", value 就是"zhangsan"

    一个字典中的  key  的类型 不一定都一样

    一个字典中的  value  的类型  也不必都一样~

    综上,key 和 value 对类型无约束

    1. a ={
    2. "id":1 ,
    3. "name" : "zhangsan",
    4. }

    最后一个键值对的逗号可写可不写,其它的必须加上逗号.

    字典查找key

    1. #1. 使用 in 来判定某个 key 是否在字典中存在.
    2. a ={
    3. "id":1,
    4. "name":"zhangsan"
    5. }
    6. print("id" in a)
    7. print("classId" in a)
    8. # in 只是判定 key 是否存在, 和 value 无关!
    9. print("zhangsan" in a)
    10. # not in 来判定 key 在字典中不存在
    11. print("id" not in a)
    12. print("classId" not in a)
    13. # 运行结果:
    14. # True
    15. # False
    16. # False
    17. # False
    18. # True
    1. #2. 使用 [ ] 来根据 key 获取到 value
    2. a ={
    3. "id" : 1,
    4. "name" : "zhangsan",
    5. 100 : "list"
    6. }
    7. print(a["id"])
    8. print(a["name"])
    9. print(a[100]) #注意这里表示的是key100
    10. print(a["classId"])
    11. # # 运行结果:
    12. # 1
    13. # zhangsan
    14. # list
    15. # # KeyError: 'classId'#因为找不到

    在 Python 中,可以通过多层索引来查找嵌套字典中最里面的值

    举个例子,假设有以下嵌套字典

    1. my_dict = {
    2. 'name': 'John',
    3. 'age': 30,
    4. 'contacts': {
    5. 'email': 'john@example.com',
    6. 'phone': {
    7. 'mobile': '123-456-7890',
    8. 'home': '098-765-4321'
    9. }
    10. }
    11. }

    要查找最里面的电话号码,可以使用以下代码:

    1. phone_number = my_dict['contacts']['phone']['mobile']
    2. print(phone_number) # 输出: '123-456-7890'

    另外,如果不确定某个键是否存在,可以使用 get 方法来避免出错

    1. phone_number = my_dict.get('contacts', {}).get('phone', {}).get('mobile')
    2. print(phone_number) # 输出: '123-456-7890'

    如果某一层嵌套字典不存在,那么 get 方法就会返回一个空字典 {},这样就可以继续向下查找了。

    dictionary&list对比

    字典的新增修改删除

    1. #1.在字典中新增元素,使用[ ] 来进行.
    2. a = {
    3. "id" : 1,
    4. "name" : "zhangsan",
    5. }
    6. # 这个操作就是往字典里插入新的键值对.
    7. a["score"] = 90
    8. print(a)
    9. #2. 在字典中, 根据 key 修改 value, 也是使用 [ ]来进行的~
    10. a["score"] = 100
    11. print(a)
    12. #3. 使用 pop 方法, 根据 key 来删除键值对~
    13. a.pop("name")
    14. print(a)
    15. # 运行结果:
    16. # {'id': 1, 'name': 'zhangsan', 'score': 90}
    17. # {'id': 1, 'name': 'zhangsan', 'score': 100}
    18. # {'id': 1, 'score': 100}

    可以通过Python中的 update() 方法替换字典中的键值对。该方法接收一个字典作为参数,将该字典中的键值对替换到原字典中对应的键上。

    以下是一个简单的示例代码:

    1. dict1 = {"a": 1, "b": 2, "c": 3}
    2. dict2 = {"b": 4, "d": 5}
    3. dict1.update(dict2)
    4. print(dict1)

    输出结果为:

    {'a': 1, 'b': 4, 'c': 3, 'd': 5}
    

    可以看到,字典dict2中的键值对已经被替换到了dict1中对应的键上,同时新增的键值对也被添加到了dict1中。如果键已经存在,则新值将取代旧值

    小结:字典的各种操作,都是针对 key 来进行的!!
            从而,新增,删除, 获取value,修改value.....

    理解字典操作的效率

    遍历指的是:能够把一个可迭代对象,里面包含的元素依次取出,并进行一些操作.整个过程要求不重不漏.

    字典被设计出来的初衷,不是为了遍历,而是为了增删查改.

    字典是 哈希表,进行增删改查操作,效率度非常高!!

    字典遍历效率就要一些.

    哈希表 这个结构被设计的非常巧妙,能够以"常数级"时间复杂度来完成增删改查~

    "常数级":无论字典中有多少元素~

    新增,修改,查找 操作都是固定时间,不会因为元素多了,操作就慢了~

    ❗❗❗哈希表非常重要,后面会继续深入学习发博文

    字典的遍历

    1. #1 直接使用 for 循环来遍历字典
    2. a = {
    3. "id": 1,
    4. "name":"zhangsan",
    5. "score":90,
    6. }
    7. for key in a:
    8. print(key,a[key])
    9. # 运行结果:
    10. # id 1
    11. # name zhangsan
    12. # score 90

    在C++ 或者 Java 中,哈希表里储存的键值对是无序的!

    但在 Python 中还不一样~

    Python 中做了特殊处理~~能够保证 遍历出来的顺序 和 插入进来的顺序相同~~

    Python中的字典,不是单纯的一个哈希表

    keys 获取字典中的所有 key

    values 获取字典中的所有value

    items 获取字典中的所有键值对~

    1. a = {
    2. "id": 1,
    3. "name":"zhangsan",
    4. "score":90,
    5. }
    6. print(a.keys())
    7. print(a.values())
    8. print(a.items())
    9. # 运行结果:
    10. # dict_keys(['id', 'name', 'score'])
    11. # dict_values([1, 'zhangsan', 90])
    12. # dict_items([('id', 1), ('name', 'zhangsan'), ('score', 90)])

    keys 和 values 返回的结果,看起来像列表,又不完全是~~

    自定义类型~~

    使用的时候也可以把它当作列表来使用~~

    items返回的 首先是一个列表一样的结构,里面每个元素又是一个元组,元组里面包含了键和值.

    so 可以利用类似于自定义读取利用for方法去读取它的值一样去遍历取出,如下:

    1. a = {
    2. "id": 1,
    3. "name":"zhangsan",
    4. "score":90,
    5. }
    6. for key,value in a.items():
    7. print(key,value)
    8. # 运行结果:
    9. # id 1
    10. # name zhangsan
    11. # score 90

    可哈希的类型

    哈希的概念
    哈希技术是一种单向加密技术,也就是说,它可以将任何长度的原始消息转换成一个特定长度的哈希值,但无法从哈希值反推出原始消息。

    哈希函数通常具有以下特点

    - 压缩性:无论输入消息的长度多长,产生的哈希值长度固定。

    - 易计算性:计算哈希值的操作很容易,即使处理的数据量很大。

    - 抗碰撞性:难以找到两个不同的输入消息,其哈希值相同,也称为“哈希冲突”。

    哈希技术近年来在越来越多的领域中得到了广泛的应用,比如密码学中的数字签名、身份认证、密码存储等,还有数据完整性校验、指纹识别、电子商务中的信任机制等

    在 python 里专门提供了一个 hash 函数~

    1. print(hash(0))
    2. print(hash(3.14))
    3. print(hash("hello"))
    4. print(hash(True))
    5. # # 运行结果:
    6. # 0
    7. # 322818021289917443
    8. # -5961696303172855508
    9. # 1

    通过上面代码运行结果可知:整数,浮点数,字符串,布尔值,元组以计算哈希值.--->可作为key

    1. # 有的类型是不能计算哈希值的.
    2. print(hash([1,2,3]))
    3. # 运行结果:
    4. # TypeError: unhashable type: 'list'
    1. print(hash({}))
    2. # # 运行结果:
    3. # # TypeError: unhashable type: 'dict'

    通过上面代码运行结果可知,列表,字典,不可以哈希.

    summary:不可变(整数,浮点数,字符串,布尔值,元组)的对象可哈希,

                    可变(字典,列表)的对象不可哈希

                     字典,列表,元组 在python中是非常常用的 内置类型~

                     相比于 int, str, float...

                     它们内部可以再包含其它元素~

                     它们属于 容器/集合类~

    🍒字典的知识点就分享到这里啦~🍒

    🍒喜欢就一键三连支持一下吧~🍒

    🍒谢谢家人们!🍒

  • 相关阅读:
    【数据库】B树、B+树、索引
    Go 字符串类型的实现原理
    RSA概念详解及工具推荐大全 - lmn
    cs224w(图机器学习)2021冬季课程学习笔记6
    Servlet知识点总结-DX的笔记
    【递归知识+练习】
    pb:常用函数和语句清单
    Unity Raycast开启了新的性能时代
    TCN代码详解-Torch (误导纠正)
    项目常用工具类
  • 原文地址:https://blog.csdn.net/Aileenvov/article/details/132660992