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}

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

        

什么是键、值呢?

在字典中,每个元素由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))    # 未缓存

        

  • 51
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建一个字典,包含你的姓名、年龄、性别和国籍。 ```python my_info = {'name': 'Alice', 'age': 25, 'gender': 'female', 'nationality': 'China'} ``` 2. 给定一个字典,输出它的所有键和值。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} for key, value in my_dict.items(): print(key, value) ``` 3. 给定一个字典,输出它的所有键。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} for key in my_dict.keys(): print(key) ``` 4. 给定一个字典,输出它的所有值。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} for value in my_dict.values(): print(value) ``` 5. 给定一个字典,删除键为 'a' 的键值对。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} del my_dict['a'] ``` 6. 给定两个字典,将它们合并为一个字典。 ```python dict1 = {'a': 1, 'b': 2} dict2 = {'c': 3, 'd': 4} merged_dict = {**dict1, **dict2} ``` 7. 给定一个字典,判断它是否包含键 'a'。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} if 'a' in my_dict: print('Yes') else: print('No') ``` 8. 给定一个字典,判断它是否包含值为 2 的键值对。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} if 2 in my_dict.values(): print('Yes') else: print('No') ``` 9. 给定一个字典,返回它的长度(即键值对的个数)。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} length = len(my_dict) ``` 10. 给定一个字典,将它的所有值加上10。 ```python my_dict = {'a': 1, 'b': 2, 'c': 3} for key in my_dict: my_dict[key] += 10 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值