Python 字典 (Dictionary)使用详解

2025-07-16 18:50

本文主要是介绍Python 字典 (Dictionary)使用详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)...

字典

字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力。

1.基本特性

  • 键值对集合:存储数据形式为 key: value 对
  • 无序性:Python 3.7+ 开始保持插入顺序(实现细节,应视为无序)
  • 可变性:可以动态添加、修改、删除键值对
  • 键的唯一性:每个键必须是唯一的
  • 键的可哈希性:键必须是不可变类型(如字符串、数字、元组等)
  • 高效查找:基于哈希表实现,查找时间复杂度接近 O(1)

2.创建字典

# 使用花括号(最常用)
d1 = {'name': 'Alice', 'age': 25}
# 使用 dict() 构造函数
d2 = dict(name='Bob', age=30)  # 键作为关键字参数
d3 = dict([('nphpame', 'Charlie'), ('age', 35)])  # 从键值对序列
# 字典推导式
d4 = {x: x**2 for x inpython range(5)}  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# fromkeys 方法 - 为多个键设置相同的默认值
keys = ['a', 'b', 'c']
d5 = dict.fromkeys(keys, 0)  # {'a': 0, 'b': 0, 'c': 0}
# 空字典
empty_dict = {}
empty_dict2 = dict()

3.访问元素

person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 通过键访问
print(person['name'])  # 'Alice'
# 使用 get() 方法(避免KeyError)
print(person.get('age'))      # 25
print(person.get('country'))  # None
print(person.get('country', 'USA'))  # 指定默认值 'USA'
# 检查键是否存在
print('name' in person)     # True
print('country' in person)  # False
# 获取所有键、值、键值对
print(person.keys())    # dict_keys(['name', 'age', 'city'])
print(person.values())  # dict_values(['Alice', 25, 'New York'])
print(person.items())   # dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])

4.修改字典

person = {'name': 'Alice', 'age': 25}
# 添加/修改元素
person['city'] = 'New York'  # 添加
person['age'] = 26           # 修改
# update() 方法 - 批量更dHLcDKz新
person.update({'age': 27, 'country': 'USA'})
# setdefault() - 如果键不存在则设置默认值
person.setdefault('gender', 'female')  # 返回 'female'
person.setdefault('name', 'Bob')      # 不修改,返回 'Alice'
# 合并字典 (Python 3.9+)
dict1 = {'a': 1, 'b': 2php}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2  # {'a': 1, 'b': 3, 'c': 4}

5.删除元素

person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# del 语句
del person['age']
# pop() - 删除并返回指定键的值
city = person.pop('city')  # 返回 'New York'
# popitem() - 删除并返回最后插入的键值对 (Python 3.7+)
key, value = person.popitem()  # 可能是任意项(Python 3.7前)
# clear() - 清空字典
person.clear()  # {}
# 注意:删除不存在的键会引发 KeyError

6.字典遍历

scores = {'Alice': 85, 'Bob': 92, 'Charlie': 78}
# 遍历键
for name in scores:
    print(name)
for name in scores.keys():
    print(name)
# 遍历值
for score in scores.values():
    print(score)
# 遍历键值对
for name, score in scores.items():
    print(f"{name}: {score}")
# 带索引的遍历 (Python 3.7+ 保持插入顺序)
for i, (name, score) in enumerate(scores.items()):
    print(f"{i+1}. {name}: {score}")

7.字典的高级特性

默认字典 (collections.defaultdict)

from collections import defaultdict
# 为不存在的键提供默认值
word_counts = defaultdict(int)  # 默认值为 int() 即 0
word_counts['apple'] += 1  # 自动初始化为0然后加1
# 复杂默认值
grouped_data = defaultdict(list)
grouped_data['fruits'].append('apple')

有序字典

from collections import OrderedDict
# 保持元素插入顺序(Python 3.7+ 普通字典也保持顺序)
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3

计数器

from collections import Counter
# 统计元素出现次数
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
word_counts = Counter(words)
print(word_counts.most_common(2))  # [('apple', 3), ('banana', 2)]

8.字典的视图对象

字典的keys(),values(),items()返回的是视图对象:

d = {'a': 1, 'China编程b': 2}
keys = d.keys()
# 视图是动态的
d['c'] = 3
print(keys)  # dict_keys(['a', 'b', 'c'])
# 支持集合操作
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
print(d1.keys() & d2.keys())  # {'b'}
print(d1.keys() - d2.keys())  # {'a'}

9.字典与JSON

import json
# 字典转JSON
person = {'name': 'Alice', 'age': 25}
json_str = json.dumps(person)  # '{"name": "Alice", "age": 25}'
# JSON转字典
person_dict = json.loads(json_str)

10.性能考虑

  1. 查找速度快:接近 O(1) 时间复杂度
  2. 内存占用较大:比列表等结构占用更多内存
  3. 键的选择:
    • 使用简单、不可变对象作为键
    • 避免使用复杂对象作为键
    • 字符串是最常用的键类型

11.适用场景

  1. 存储对象属性或配置信息
  2. 快速查找表
  3. 实现稀疏数据结构
  4. 缓存计算结果(Memoization)
  5. 数据分组和聚合
  6. JSON数据交互

小结

  1. 字典键必须是可哈希的(不可变类型)
    • 允许:字符串、数字、元组(仅包含可哈希元素)
    • 不允许:列表、字典、集合等可变类型
  2. 比较操作:
    • == 比较键值对内容
    • != 判断是否不相等
    • 没有 <, > 等比较操作
  3. 字典在Python 3.6及之前是无序的,3.7+开始保持插入顺序(作为实现细节,3.7正式成为语言特性)

字典是Python中最灵活和强大的数据结构之一,熟练掌握字典的使用可以极大提高Python编程效率和代码质量。

到此这篇关于Python 字典 (Dictionary) 详解的文章就介绍到这了,更多相关Python 字典 Dictionary内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Python 字典 (Dictionary)使用详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155407

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达