python 字典的基础及应用

发布时间:2024年01月15日

当前版本:

  • 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}

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

????????

什么是键、值呢?

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

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

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

????????

定义标准的字典

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

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

????????

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

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

????????

2. 字典的操作方法

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

2.1. 添加/更新元素

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

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

????????

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

????????

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

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

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

如果键已存在则会被更新

????????

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

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

????????

也能使用for循环批量添加

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

????????

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

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

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

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

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

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

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

????????

2.2. 删除元素

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

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

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

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

????????

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

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

????????

【案例三】清空字典

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

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

????????

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

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

????????

2.3. 访问元素

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

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

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

????????

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

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

????????

【案例三】访问全部键

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

????????

?【案例四】访问全部值

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

????????

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

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

????????

2.4. 检查字典

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

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

????????

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

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

????????

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

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

????????

检查该字典是否为空

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

????????

3. 字典的实际应用

3.1.?配置文件

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

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

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

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

????????

3.2. 循环遍历字典

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

【案例一】遍历键

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

????????

?【案例二】遍历值 values()

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

????????

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

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

????????

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}")

????????

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

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

????????

查询id为3员工的薪资

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

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

????????

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))    # 未缓存

????????

文章来源:https://blog.csdn.net/m0_61066945/article/details/135526736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。