python 字典的基础及应用


当前版本:

  • Python 3.8.4

简介

    字典是一种无序的、可变的、键值对的数据结构。通常用于存储键值对,其中键是唯一的,值可以是任何类型的对象。它可以快速查找和访问数据,关联相互有关的信息,灵活地添加、修改和删除数据,以及存储标签或选项。字典的高效性和哈希映射使得它在各种场景下都非常有用。
    需要注意的是:字典中的键是无序的,所以无法通过索引来访问字典的元素。如果需要按特定顺序访问字典的元素,可以使用 sorted() 函数对键进行排序。

        

文章目录如下

1. 如何定义字典

什么是键、值呢?

定义标准的字典

2. 字典的操作方法

2.1. 添加/更新元素

2.2. 删除元素

2.3. 访问元素

2.4. 检查字典

3. 字典的实际应用

3.1. 配置文件

3.2. 循环遍历字典

3.3. 模拟数据库

3.4. 模拟缓存


        

1. 如何定义字典

python中的 "字典" 类似于我们平时在新华书店买的 "字典"。新华字典的作用是存储汉字、词语、成语等,我们一般通过目录去查找某个词语的详细解释。而python中的 "字典" 也是类似的用法,当需要对某些字段做解释时,那么利用字典来存储。比如 姓名:小李,年龄:18

D = {"name" : "小李", "age" : 18}

使用字典存储以后我们可以直接对某个字段取值(也就是对键取值)

python 字典的基础及应用_第1张图片

        

什么是键、值呢?

在字典中,每个元素由2个值组成,前面的值称为 "键",后面的值称为 "值"

D = {"键1":"值1" , "键2":"值2"}
    # 使用冒号来分割键和值,组成的一个元素
    # 每个元素之间的用逗号来分割
  • 键(key)是数据的唯一标识符(不可变),用于唯一地标识字典中的每个元素。可以是字符串、数字或元组等数据类型。
  • 值(value)是与键相关联的数据。每个键在字典中都对应一个值,可以存储任意类型的数据。可以是字符串、数字、列表、元组、字典或其他复杂的数据类型。

当键和值组合在一起后就成为了一组数据,我们把这组数据统称为 "键值对"。

        

定义标准的字典

在python中可以使用两种方法来定义一个字典({ } 或者 dict

D = {}        # 定义一个空字典
D = dict()    # 定义一个空字典

python 字典的基础及应用_第2张图片

        

当定义字典的内容较多时,我们一般采用换行的格式(便于阅读)

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}

python 字典的基础及应用_第3张图片

        

2. 字典的操作方法

  • 这一章节主要介绍字典的各种增删改查。

2.1. 添加/更新元素

我们一般通过键来添加一个值

D = {}
D["name"] = "小李"

python 字典的基础及应用_第4张图片

        

键是唯一的,如果向已存在的键添加值则会修改原来的值

python 字典的基础及应用_第5张图片

        

除了单个添加键值对以外,也可以使用 update 批量添加

# 定义一个字典
D = {'A': 1, 'B': 2, 'C': 3}

# 批量添加键值对
D.update({'D': 4, 'E': 5})

python 字典的基础及应用_第6张图片

如果键已存在则会被更新

python 字典的基础及应用_第7张图片

        

键是唯一的,但值可以重复

D = {"小李":18 , "小张":18}

python 字典的基础及应用_第8张图片

        

也能使用for循环批量添加

# 定义一个空字典
D = {}
# 循环0~4
for i in range(5):
    # 将键设为A{i},值设为i除以2取余
    D[f"A{i}"] = i % 2

python 字典的基础及应用_第9张图片

        

还能将两个列表或元组组合成一个字典

# 定义2个列表
L1 = ["A", "B", "C"]
L2 = [1, 2, 3]

# 将这2个列表转换为zip,再转换为字典
D = dict(zip(L1, L2))

python 字典的基础及应用_第10张图片

python 字典的基础及应用_第11张图片

如果两个列表或元组的数量不一致,那么只取最短的数量来组成字典

python 字典的基础及应用_第12张图片

由于键是唯一的,当作为键的列表中存在相同的元素时,那么只取一个值作为键;作为值的列表只取最后一个。

python 字典的基础及应用_第13张图片

相当于这种情况(已经添加了A,然后更新A)

D = {}
D["A"] = 1  # 添加到字典
D["A"] = 2  # 由于键相同,所以更新

        

2.2. 删除元素

在删除元素的方法中,常用 del 、pop 、clear

  • del:删除指定键的键值对
  • pop:删除指定键的键值对,并返回对应的值
  • clear:清空字典

【案例一】通过一个键来删除键值对

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 删除"李四"这个键值对
del age["李四"]

python 字典的基础及应用_第14张图片

        

 【案例二】通过一个键来删除键值对(返回被删除的值)

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 删除"李四"这个键值对
age.pop("李四")

python 字典的基础及应用_第15张图片

        

【案例三】清空字典

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 清空这个字典
age.clear()

python 字典的基础及应用_第16张图片

也可以利用重新赋值的方式来清空

python 字典的基础及应用_第17张图片

        

【案例四】不删除键,只删除值

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 将"李四"修改为空
age["李四"] = None

python 字典的基础及应用_第18张图片

        

2.3. 访问元素

字典可以单独访问某个值,也可以访问全部键或值。

【案例一】通过键名访问值

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 访问张三的值
age["张三"]

python 字典的基础及应用_第19张图片

        

【案例二】如果该键不存在返回默认值

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 如果不存在张四,则返回100
age.get("张四", 100)

python 字典的基础及应用_第20张图片

        

【案例三】访问全部键

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 访问全部键
age.keys()

python 字典的基础及应用_第21张图片

        

 【案例四】访问全部值

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 访问全部值
age.values()

python 字典的基础及应用_第22张图片

        

 【案例五】访问全部键和值

age = {
    "张三" : 22,
    "李四" : 18,
    "王五" : 21,
    "赵六" : 15
}
# 访问全部键和值
age.items()

python 字典的基础及应用_第23张图片

        

2.4. 检查字典

在操作业务时为防止数据被修改,一般需要先判断某个键是否存在,如果不存在则添加数据

D = {"A":1, "B":2}
# 判断是否存在为A的键
"A" in D

python 字典的基础及应用_第24张图片

        

同样可以使用 in 检查某个值是否存在

D = {"A":1, "B":2}
# 判断是否存在为1的值
1 in D.values()

python 字典的基础及应用_第25张图片

        

使用 if + and 判断多个键是否存在

D = {"A":1, "B":2, "C":3}
if "A" in D and "B" in D:
    print("A和B都存在")

python 字典的基础及应用_第26张图片

        

检查该字典是否为空

D = {}
if len(D) == 0:
    print("该字典为空")

python 字典的基础及应用_第27张图片

        

3. 字典的实际应用

3.1. 配置文件

字典可以为应用程序提供轻松的配置文件格式。字典中的键可以是配置项名称,值则可以是该配置项的值。

例如设定一些数据库的配置

db_conf = {
    "host": "localhost",
    "port": 3306,
    "database": "test",
    "user" : "root",
    "password" : "123456"
}

在调用这些配置时可以直接通过字典读取

python 字典的基础及应用_第28张图片

        

3.2. 循环遍历字典

循环遍历也是字典最常用的方法之一,介绍几种实用的:

【案例一】遍历键

db_conf = {
    "host": "localhost",
    "port": 3306,
    "database": "test",
    "user" : "root",
    "password" : "123456"
}
# 遍历所有的键
for key in db_conf:
    print(f"当前的键为:{key}")

python 字典的基础及应用_第29张图片

        

 【案例二】遍历值 values()

db_conf = {
    "host": "localhost",
    "port": 3306,
    "database": "test",
    "user" : "root",
    "password" : "123456"
}
# 遍历所有的值
for value in db_conf.values():
    print(f"当前的值为:{value}")

python 字典的基础及应用_第30张图片

        

 【案例三】遍历所有的键和值 items()

db_conf = {
    "host": "localhost",
    "port": 3306,
    "database": "test",
    "user" : "root",
    "password" : "123456"
}
# 遍历所有的值
for key,value in db_conf.items():
    print(f"当前的键为:{key},当前的值为:{value}")

python 字典的基础及应用_第31张图片

        

3.3. 模拟数据库

  • 字典可以存储表的行数据,将键作为列名,值作为单元格的值。这对于小型应用很有帮助。

使用字典定义一张员工表

staff = {
 # id号  姓名            年龄        工资
    1: {'name': '张三', 'age': 25, 'salary': 8000},
    2: {'name': '李四', 'age': 30, 'salary': 7000},
    3: {'name': '王五', 'age': 35, 'salary': 15000},
}

添加一个员工信息

staff[4] = {'name': '赵六', 'age': 27, 'salary': 9000}

        

查询全部员工信息

for key,value in staff.items():
    print(f"id: {key}, message: {value}")

python 字典的基础及应用_第32张图片

        

查询薪资大于8000的员工信息

for key,value in staff.items():
    if value['salary'] > 8000:
      print(f"id: {key}, message: {value}")

python 字典的基础及应用_第33张图片

        

查询id为3员工的薪资

print(staff[3]['salary'])

python 字典的基础及应用_第34张图片

for key,value in staff.items():
    if key == 3:
      print(value['name'], ':', value['salary'])

python 字典的基础及应用_第35张图片

        

3.4. 模拟缓存

使用字典来缓存函数计算结果,以允许后续的函数调用更快地执行。这对于需要重复计算的函数和大量数据时非常有用

# 创建一个空字典作为缓存
cache = {}

def power_operation(x):
    '''封装一个幂运算的函数'''
    # 检查结果是否已经在缓存中
    if x in cache:
        # 如果在缓存中,直接返回缓存中的结果
        return cache[x]

    # 如果结果不在缓存中,进行计算
    result = x ** 2

    # 将结果保存到缓存中
    cache[x] = x ** 2

    return result

# 调用函数
print(power_operation(3))    # 未缓存
print(power_operation(3))    # 已缓存
print(power_operation(6))    # 未缓存

        

你可能感兴趣的:(Python,python,开发语言)