◎知识点
为什么需要字典?
什么是字典?
字典的创建
◎脚本练习
#!/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'}
Python
▽ 字典示意图