当前位置: 首页 > article >正文

【Python】字典

在这里插入图片描述

个人主页:GUIQU.
归属专栏:Python

在这里插入图片描述

文章目录

  • 1. 字典概述
  • 2. 字典的创建与初始化
    • 2.1 直接使用花括号创建
    • 2.2 使用 `dict()` 构造函数创建
    • 2.3 字典推导式创建
  • 3. 字典的基本操作
    • 3.1 访问字典中的值
    • 3.2 修改和添加键值对
    • 3.3 删除键值对
  • 4. 字典的遍历
    • 4.1 遍历键
    • 4.2 遍历值
    • 4.3 遍历键值对
  • 5. 字典的常用方法
    • 5.1 `update()` 方法
    • 5.2 `setdefault()` 方法
    • 5.3 `clear()` 方法
  • 6. 字典的嵌套
    • 6.1 字典嵌套字典
    • 6.2 字典嵌套列表
  • 7. 字典的应用场景
    • 7.1 数据缓存
    • 7.2 统计字符频率
    • 7.3 配置管理
  • 8. 字典的性能考虑
    • 8.1 查找性能
    • 8.2 内存占用
    • 8.3 排序问题

正文

1. 字典概述

在 Python 里,字典(Dictionary)是一种极为重要且强大的数据结构,它属于可变容器模型,可存储任意数量的 Python
对象。字典以键 - 值对(key - value
pairs)的形式组织数据,每个键必须是唯一的,而值可以是任意类型的数据,包括数字、字符串、列表、元组,甚至是其他字典。这种数据结构在处理具有映射关系的数据时表现出色,能够高效地通过键来快速查找对应的值。

字典的独特价值
字典的独特之处在于其基于哈希表(Hash Table)实现,这使得通过键来查找值的操作速度极快,平均时间复杂度为 O ( 1 ) O(1) O(1)。这一特性让字典在处理大规模数据的查找、统计和存储时具有显著优势,广泛应用于各种实际场景,如数据缓存、配置管理、数据库查询结果处理等。

2. 字典的创建与初始化

2.1 直接使用花括号创建

# 创建一个空字典
empty_dict = {}
print(empty_dict)

# 创建包含键值对的字典
student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}
print(student)

上述代码展示了两种使用花括号创建字典的方式。首先创建了一个空字典 empty_dict,然后创建了一个名为 student 的字典,其中包含了学生的姓名、年龄和专业等信息。

2.2 使用 dict() 构造函数创建

# 通过传入键值对参数创建字典
teacher = dict(name="Bob", age=35, subject="Math")
print(teacher)

# 通过可迭代对象创建字典,可迭代对象中的每个元素应为包含两个元素的可迭代对象(如元组)
pairs = [("city", "New York"), ("country", "USA")]
address = dict(pairs)
print(address)

这里展示了使用 dict() 构造函数创建字典的两种常见方式。第一种是直接传入键值对参数,第二种是传入一个可迭代对象,该可迭代对象中的每个元素都是一个包含两个元素的可迭代对象,分别作为键和值。

2.3 字典推导式创建

# 从已有的数据中通过字典推导式创建字典
numbers = [1, 2, 3, 4]
squares = {x: x**2 for x in numbers}
print(squares)

字典推导式提供了一种简洁的方式来创建字典。上述代码通过对列表 numbers 中的每个元素进行平方运算,创建了一个键为原元素、值为其平方的字典 squares

3. 字典的基本操作

3.1 访问字典中的值

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 使用键来访问对应的值
name = student["name"]
print(name)

# 使用 get() 方法访问值,当键不存在时可指定默认值
grade = student.get("grade", "N/A")
print(grade)

可以使用方括号 [] 直接通过键来访问字典中的值,但如果键不存在会引发 KeyError 异常。而 get() 方法则更为安全,当键不存在时,它会返回指定的默认值(若未指定则返回 None)。

3.2 修改和添加键值对

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 修改已有键的值
student["age"] = 21
print(student)

# 添加新的键值对
student["grade"] = "A"
print(student)

直接使用方括号 [] 并结合赋值语句,既可以修改已有键对应的值,也可以添加新的键值对。如果键已经存在,赋值操作会更新该键对应的值;如果键不存在,则会创建一个新的键值对。

3.3 删除键值对

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 使用 del 语句删除指定键的键值对
del student["major"]
print(student)

# 使用 pop() 方法删除指定键的键值对,并返回该键对应的值
age = student.pop("age")
print(age)
print(student)

# 使用 popitem() 方法随机删除并返回一个键值对(在 Python 3.7 及以后版本中,按插入顺序删除最后一个)
item = student.popitem()
print(item)
print(student)

del 语句可以直接删除指定键的键值对。pop() 方法不仅能删除指定键的键值对,还会返回该键对应的值。popitem() 方法则用于随机删除并返回一个键值对(在 Python 3.7 及以后版本中,按插入顺序删除最后一个)。

4. 字典的遍历

4.1 遍历键

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 使用 keys() 方法遍历键
for key in student.keys():
    print(key)

# 直接遍历字典时,默认遍历键
for key in student:
    print(key)

keys() 方法会返回一个包含字典所有键的视图对象,可用于遍历键。实际上,直接对字典进行遍历操作时,默认就是遍历其键。

4.2 遍历值

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 使用 values() 方法遍历值
for value in student.values():
    print(value)

values() 方法会返回一个包含字典所有值的视图对象,通过该对象可以遍历字典中的所有值。

4.3 遍历键值对

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 使用 items() 方法遍历键值对
for key, value in student.items():
    print(f"Key: {key}, Value: {value}")

items() 方法会返回一个包含所有键值对的视图对象,每个键值对以元组的形式呈现。通过解包元组,可以方便地同时遍历键和值。

5. 字典的常用方法

5.1 update() 方法

dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}

# 使用 update() 方法将 dict2 中的键值对更新到 dict1 中
dict1.update(dict2)
print(dict1)

update() 方法用于将另一个字典中的键值对更新到当前字典中。如果有相同的键,会用新字典中的值覆盖原字典中的值;如果是新的键,则会添加到原字典中。

5.2 setdefault() 方法

student = {
    "name": "Alice",
    "age": 20
}

# 使用 setdefault() 方法获取键对应的值,如果键不存在则设置默认值并返回
major = student.setdefault("major", "Undecided")
print(major)
print(student)

setdefault() 方法用于获取指定键对应的值。如果键存在,直接返回该值;如果键不存在,则会将该键和指定的默认值添加到字典中,并返回默认值。

5.3 clear() 方法

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 使用 clear() 方法清空字典
student.clear()
print(student)

clear() 方法用于清空字典中的所有键值对,使字典变为空字典。

6. 字典的嵌套

6.1 字典嵌套字典

# 一个班级的学生信息,每个学生信息以字典形式存储在班级字典中
classroom = {
    "student1": {
        "name": "Alice",
        "age": 20,
        "major": "Computer Science"
    },
    "student2": {
        "name": "Bob",
        "age": 21,
        "major": "Mathematics"
    }
}

# 访问嵌套字典中的值
print(classroom["student1"]["name"])

字典可以嵌套其他字典,形成复杂的数据结构。通过多级键的访问,可以获取嵌套字典中的具体值。

6.2 字典嵌套列表

# 一个学生的课程成绩信息,课程成绩以列表形式存储在学生字典中
student = {
    "name": "Alice",
    "grades": [85, 90, 78]
}

# 访问嵌套列表中的值
print(student["grades"][1])

字典也可以嵌套列表,这种结构适合存储一个键对应多个值的情况。通过键和列表索引的组合,可以访问嵌套列表中的具体元素。

7. 字典的应用场景

7.1 数据缓存

# 模拟一个简单的数据缓存
cache = {}

def get_data(key):
    if key in cache:
        return cache[key]
    # 模拟从数据库或其他数据源获取数据
    data = f"Data for {key}"
    cache[key] = data
    return data

# 第一次获取数据
result1 = get_data("item1")
print(result1)

# 第二次获取相同数据,直接从缓存中获取
result2 = get_data("item1")
print(result2)

字典可用于实现简单的数据缓存机制。当需要频繁获取相同的数据时,先检查字典中是否已存在该数据,如果存在则直接返回,避免重复的计算或数据查询操作,提高程序的性能。

7.2 统计字符频率

text = "hello world"
char_frequency = {}

for char in text:
    if char in char_frequency:
        char_frequency[char] += 1
    else:
        char_frequency[char] = 1

print(char_frequency)

字典可以方便地用于统计文本中字符的出现频率。通过遍历文本中的每个字符,将字符作为键,出现次数作为值,不断更新字典中的统计信息。

7.3 配置管理

# 模拟一个应用程序的配置信息
config = {
    "database": {
        "host": "localhost",
        "port": 3306,
        "username": "root",
        "password": "password"
    },
    "app": {
        "debug": True,
        "timeout": 10
    }
}

# 访问配置信息
db_host = config["database"]["host"]
print(db_host)

在实际开发中,字典常用于存储和管理应用程序的配置信息。通过将配置信息组织成字典形式,可以方便地进行读取和修改操作。

8. 字典的性能考虑

8.1 查找性能

字典基于哈希表实现,在大多数情况下,查找操作的平均时间复杂度为 O ( 1 ) O(1) O(1),这使得字典在处理大规模数据的查找时非常高效。但在极端情况下,如哈希冲突严重时,查找性能可能会下降。

8.2 内存占用

字典需要额外的内存来维护哈希表结构,因此在存储大量数据时,内存占用相对较高。同时,随着键值对的插入和删除,字典可能会进行动态扩容和缩容操作,这也会对内存使用产生影响。

8.3 排序问题

字典本身是无序的(在 Python 3.7 及以后版本中,字典会保持插入顺序)。如果需要对字典进行排序,通常需要将字典的键或值提取出来,转换为列表后再进行排序操作。

student = {
    "name": "Alice",
    "age": 20,
    "major": "Computer Science"
}

# 按键排序
sorted_keys = sorted(student.keys())
for key in sorted_keys:
    print(f"Key: {key}, Value: {student[key]}")

# 按值排序
sorted_items = sorted(student.items(), key=lambda item: item[1])
for key, value in sorted_items:
    print(f"Key: {key}, Value: {value}")

以上代码展示了如何对字典的键和键值对进行排序操作。对于键的排序,使用 sorted() 函数对 keys() 方法返回的视图对象进行排序;对于键值对的排序,使用 sorted() 函数并通过 key 参数指定排序的依据。

通过深入理解字典的创建、操作、方法、嵌套、应用场景以及性能特点,开发者可以在 Python 编程中更加灵活、高效地使用字典,解决各种实际问题。

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述


http://www.kler.cn/a/540830.html

相关文章:

  • Java 魔法:精准掌控 PDF 合同模板,指定页码与关键字替换签章日期
  • aio-pika 快速上手(Python 异步 RabbitMQ 客户端)
  • 如何避免大语言模型中涉及丢番图方程的问题
  • 【Java】线上故障排查实战
  • 基于python多线程多进程爬虫的maa作业站技能使用分析
  • 操作系统—进程与线程
  • 大数据浪潮下,解锁智算云平台实操密码
  • 智能名片系统(源码+文档+部署+讲解)
  • 低成本+高性能+超灵活!Deepseek 671B+Milvus重新定义知识库搭建
  • java实现Http请求的几种常用方法
  • 编译和链接【二】
  • 网易日常实习一面面经
  • 安卓使用JExcelApi读取Excel文件
  • 06排序 + 查找(D2_查找(D1_基础学习))
  • STM32EXTI外部中断
  • 废品回收小程序:技术创新下的经济效益
  • 【快应用】多语言适配案例
  • Spring模块组成
  • 什么是 React Router?如何使用?
  • 使用云计算,企业的数据监管合规问题如何解决?
  • BUCK电路的双脉冲测试
  • 【通俗易懂说模型】反向传播(附多元分类与Softmax函数)
  • 深度学习|表示学习|Mini-Batch Normalization 具体计算举例|23
  • Intellij IDEA调整栈内存空间大小详细教程,添加参数-Xss....
  • 【推荐】爽,在 IDE 中做 LeetCode 题目的插件
  • 基于 FFmpeg 和 OpenGLES 的 iOS 视频预览和录制技术方案设计