◎知识点
为什么需要字典?
什么是字典?
字典的创建
◎脚本练习
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @FileName: dict_def.py @Function: dict definition @Author: Zhihe An @Site: https://chegva.com @Time: 2021/6/27 """ """一、为什么需要字典?""" """ 电话簿中存储了姓名和电话号码: 张三 → 13333333333 李四 → 14444444444 王五 → 15555555555 赵六 → 16666666666 """ # 姓名 names = ['张三', '李四', '王五', '赵六'] # 电话号码 numbers = ['13333333333', '14444444444', '15555555555', '16666666666'] # 如果想要查找某人的电话号码 print(numbers[names.index('王五')]) # 15555555555 """ 最好能这样:把姓名和电话号码全部都存储在一个叫phonebook的数据结构中,指定姓名'王五'后 就能直接得到其对应的电话号码 print(phonebook['王五']) # 15555555555 使用字典就可以实现 """ phonebook = { '张三': '13333333333', '李四': '14444444444', '王五': '15555555555', '赵六': '16666666666' } print(phonebook['王五']) # 15555555555 """二、什么是字典?""" """ 除了列表和元组,字典也是python语言提供的内置数据结构之一 1、字典的实现原理 字典的实现原理和查字典是类似的。当我们在字典中查找某个字时,一种办法是从字典的第一页开始 往后翻,直到找到我们要查找的字为止。这种办法就是在列表中查找元素的办法,其缺点是: 字典中的字数越多查找效率越低。第二种办法是先在字典的索引表里(比如部首表)查找这个字对应的页码, 然后直接翻到这个字对应的页,其优点是:查找效率不会随着字典中字数的增加而降低,无论查找哪个字,查找速度都非常快 """ """ 2、字典的特点 (1) 字典中的所有元素都是一个key-value对,通过指定的key总能映射到唯一指定的value 字典中不可以存在重复的key,但是可以存在重复的value (2) 字典中的元素是无序的 顺序不重要,重要的是key和value的映射关系 (3) 字典中的key必须是不可变对象 存取字典中的key-value对时,系统会调用内置函数hash根据指定的key计算出value的存储位置,也就是哈希值 对于指定的key,为了保证每次计算出的哈希值都是相同的,要求key必须是不可变对象 也就是说,只有不可变对象才存在哈希值 (4) 字典可以根据需要动态地伸缩 系统会根据需要动态地分配和回收内存,因此在使用前无须预先声明字典的容量 (5) 字典会浪费较大的内存 与列表相比,是用空间换取了时间 """ """三、字典的创建""" """ 创建字典的常见方式有三种: 1、使用花括号 """ print({'name': 'Jack', 'age': 18}) # {'name': 'Jack', 'age': 18} # 空字典 print({}) # {} """ 2、调用内置函数dict(类dict的构造方法) """ print(dict({'name': 'Jack', 'age': 18})) # {'name': 'Jack', 'age': 18} print(dict(name = 'Jack', age = 18)) # {'name': 'Jack', 'age': 18} print(dict([('name', 'Jack'), ('age', 18)])) # {'name': 'Jack', 'age': 18} print(dict(zip(range(3), 'ABC'))) # {0: 'A', 1: 'B', 2: 'C'} # 空字典 print(dict()) # {} """ 3、调用dict的方法fromKeys 调用该方法时通过参数指定所有的key,所有的value的默认值为None """ print(dict.fromkeys(['name', 'age'])) # {'name': None, 'age': None} print(dict.fromkeys(('name', 'age'))) # {'name': None, 'age': None} # 调用该方法时可以通过参数指定所有value的值 print(dict.fromkeys(['name', 'age'], 'N/A')) # {'name': 'N/A', 'age': 'N/A'}
▽ 字典示意图