Python字典用法指南

 更新时间:2026年03月22日 09:26:19   作者:老师好,我是刘同学  
Python字典是一种可变容器模型,可存储任意类型对象,以键值对形式组织数据,本文就来介绍一下Python字典完用法,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

Python字典是一种可变容器模型,可存储任意类型对象,以键值对(key-value)形式组织数据。下面通过系统分类和具体实例详细说明字典的各种操作方法。

一、字典创建与初始化

字典可以通过多种方式创建,每种方式适用于不同的场景:

# 方法1:直接使用花括号
dict1 = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 方法2:使用dict()构造函数
dict2 = dict(name='Bob', age=30, city='Shanghai')
# 方法3:从键值对序列创建
dict3 = dict([('name', 'Charlie'), ('age', 35), ('city', 'Guangzhou')])
# 方法4:使用fromkeys()方法创建默认字典
keys = ['name', 'age', 'city']
dict4 = dict.fromkeys(keys, 'unknown')
print(f"fromkeys创建: {dict4}")  # 输出: {'name': 'unknown', 'age': 'unknown', 'city': 'unknown'}

二、字典访问与查询操作

操作类型方法说明示例
直接访问dict[key]通过键访问值,键不存在时报错dict1['name'] → 'Alice'
安全访问get(key[, default])键不存在时返回默认值dict1.get('gender', 'unknown') → 'unknown'
检查存在in 操作符检查键是否存在'name' in dict1 → True
获取所有键keys()返回字典所有键的视图dict1.keys() → dict_keys(['name', 'age', 'city'])
获取所有值values()返回字典所有值的视图dict1.values() → dict_values(['Alice', 25, 'Beijing'])
获取键值对items()返回字典所有键值对的视图dict1.items() → dict_items([('name', 'Alice'), ('age', 25), ('city', 'Beijing')])
# 实际应用示例
student = {'name': '张三', 'score': 85, 'grade': 'A'}
# 安全访问示例
score = student.get('score', 0)  # 存在时返回实际值
height = student.get('height', '未记录')  # 不存在时返回默认值
print(f"分数: {score}, 身高: {height}")
# 遍历字典的三种方式
print("=== 遍历键 ===")
for key in student.keys():
    print(f"键: {key}")
print("=== 遍历值 ===")
for value in student.values():
    print(f"值: {value}")
print("=== 遍历键值对 ===")
for key, value in student.items():
    print(f"{key}: {value}")

三、字典修改与更新操作

字典内容可以通过多种方式进行修改和更新:

# 创建测试字典
person = {'name': '李四', 'age': 28}

# 1. 直接赋值修改
person['age'] = 29  # 修改已有键的值
person['city'] = '深圳'  # 添加新键值对
print(f"修改后: {person}")  # {'name': '李四', 'age': 29, 'city': '深圳'}

# 2. 使用update()方法批量更新
new_info = {'age': 30, 'gender': '男', 'salary': 15000}
person.update(new_info)
print(f"批量更新后: {person}")  # 包含所有更新后的键值对 

# 3. 使用setdefault()方法
# 键存在时返回当前值,不存在时设置默认值并返回
current_age = person.setdefault('age', 0)  # 存在,返回29
email = person.setdefault('email', 'unknown@example.com')  # 不存在,设置并返回默认值
print(f"年龄: {current_age}, 邮箱: {email}")
print(f"setdefault后字典: {person}")

四、字典删除与清空操作

字典元素的删除操作需要谨慎处理,不同方法有不同的行为:

# 创建测试字典
inventory = {'apple': 10, 'banana': 5, 'orange': 8, 'grape': 15}
# 1. del语句删除特定键值对
del inventory['banana']
print(f"删除banana后: {inventory}")  # {'apple': 10, 'orange': 8, 'grape': 15}
# 2. pop()方法删除并返回值
orange_count = inventory.pop('orange')
print(f"删除的orange数量: {orange_count}")  # 8
print(f"pop后字典: {inventory}")  # {'apple': 10, 'grape': 15}
# 3. popitem()方法删除最后插入的键值对
last_item = inventory.popitem()
print(f"最后删除的项: {last_item}")  # ('grape', 15) 
print(f"popitem后字典: {inventory}")  # {'apple': 10}
# 4. clear()方法清空字典
inventory.clear()
print(f"清空后字典: {inventory}")  # {}

五、字典复制与比较操作

字典的复制操作需要注意深浅拷贝的区别:

# 原始字典
original = {'data': [1, 2, 3], 'info': {'name': 'test'}}

# 1. 直接赋值(引用传递)
reference = original
reference['data'].append(4)
print(f"原始字典也被修改: {original}")  # {'data': [1, 2, 3, 4], 'info': {'name': 'test'}}

# 2. shallow copy()方法(浅拷贝)
shallow_copy = original.copy()
shallow_copy['data'].append(5)  # 修改嵌套对象会影响原字典
shallow_copy['info'] = 'changed'  # 修改顶层对象不影响原字典
print(f"浅拷贝后原字典: {original}")  # {'data': [1, 2, 3, 4, 5], 'info': {'name': 'test'}}

# 3. 深拷贝需要import copy模块
import copy
deep_copy = copy.deepcopy(original)
deep_copy['data'].append(6)  # 不会影响原字典
print(f"深拷贝后原字典: {original}")  # 保持不变

六、字典高级用法与实战案例

案例1:统计单词频率

def count_words(text):
    """统计文本中单词出现频率"""
    words = text.lower().split()
    word_count = {}
    for word in words:
        # 使用get方法简化计数逻辑
        word_count[word] = word_count.get(word, 0) + 1
    return word_count
# 测试统计功能
sample_text = "hello world hello python world python python"
result = count_words(sample_text)
print("单词频率统计:")
for word, count in result.items():
    print(f"  {word}: {count}")

案例2:字典视图对象的动态特性

# 字典视图会实时反映字典的变化
config = {'debug': True, 'log_level': 'info', 'max_connections': 100}

keys_view = config.keys()
values_view = config.values()
items_view = config.items()

print(f"初始键视图: {list(keys_view)}")

# 修改字典
config['timeout'] = 30
config['debug'] = False

print(f"修改后键视图: {list(keys_view)}")  # 视图实时更新
print(f"修改后值视图: {list(values_view)}")

案例3:字典推导式的使用

# 使用字典推导式快速创建字典
numbers = [1, 2, 3, 4, 5]

# 创建数字平方字典
squares = {x: x**2 for x in numbers}
print(f"平方字典: {squares}")  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# 带条件的字典推导式
even_squares = {x: x**2 for x in numbers if x % 2 == 0}
print(f"偶数平方字典: {even_squares}")  # {2: 4, 4: 16}

七、字典使用注意事项

  1. 键的唯一性:字典键必须是唯一的,重复键会覆盖之前的值
  2. 键的可哈希性:字典键必须是不可变类型(字符串、数字、元组等)
  3. 视图对象的实时性:keys()、values()、items()返回的是视图对象,会实时反映字典变化
  4. 内存考虑:字典相比列表占用更多内存,但查找速度更快

通过掌握这些字典操作方法,可以高效地处理各种键值对数据,提升Python编程的效率和质量。字典在数据处理、配置管理、缓存实现等场景中都有广泛应用。

到此这篇关于Python字典用法指南的文章就介绍到这了,更多相关Python字典内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 简单的多线程链接实现代码

    python 简单的多线程链接实现代码

    这篇文章主要介绍了python 简单的多线程链接实现代码,需要的朋友可以参考下
    2016-08-08
  • 浅谈python中频繁的print到底能浪费多长时间

    浅谈python中频繁的print到底能浪费多长时间

    今天小编就为大家分享一篇浅谈python中频繁的print到底能浪费多长时间,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python模块Typing.overload的使用场景分析

    Python模块Typing.overload的使用场景分析

    在 Python 中,typing.overload 是一个用于定义函数重载的装饰器,函数重载是指在一个类中可以定义多个相同名字但参数不同的函数,使得在调用函数时可以根据参数的不同选择不同的函数执行,这篇文章主要介绍了Python模块Typing.overload的使用,需要的朋友可以参考下
    2024-02-02
  • 利用标准库fractions模块让Python支持分数类型的方法详解

    利用标准库fractions模块让Python支持分数类型的方法详解

    最近在工作中遇到了分数处理,查找相关的资料发现可以利用Fraction类来实现,所以下面这篇文章主要给大家介绍了关于利用标准库fractions模块让Python支持分数类型的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-08-08
  • 利用Python操作消息队列RabbitMQ的方法教程

    利用Python操作消息队列RabbitMQ的方法教程

    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。下面这篇文章主要给大家介绍了关于利用Python操作消息队列RabbitMQ的方法教程,需要的朋友可以参考下。
    2017-07-07
  • python3.9安装RobotFramework的简单教程

    python3.9安装RobotFramework的简单教程

    python3.9安装RobotFramework,不同于python2.7和python3.6,使用这两个版本安装会出现问题,因为我安装遇到问题发现没有最新的教程,所以打算自己写一个,同时下面会记录安装步骤及使用的方法会出现的一些问题,对python3.9安装RobotFramework感兴趣的朋友一起看看吧
    2023-01-01
  • 用 Django 开发一个 Python Web API的方法步骤

    用 Django 开发一个 Python Web API的方法步骤

    这篇文章主要介绍了用 Django 开发一个 Python Web API的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解Python查找谁删了你的微信

    详解Python查找谁删了你的微信

    微信好友长时间不联系就可能被对方删除,但是微信也不会主动通知你。那么我们就来用python写一个工具查验一下谁删除了你的微信
    2022-02-02
  • 在Heroku云平台上部署Python的Django框架的教程

    在Heroku云平台上部署Python的Django框架的教程

    这篇文章主要介绍了在Heroku云平台上部署Python的Django框架的教程,Heroku云平台使用了Git版本控制系统,所以本教程主要提供了配置所需要的Git脚本,需要的朋友可以参考下
    2015-04-04
  • python中lxml.etree 和 ElementTree 的区别解析

    python中lxml.etree 和 ElementTree 的区别解析

    lxml.etree 提供了更多的功能,例如 XPath、XSLT、Relax NG、 和 XML 模式支持,etree 对 Python unicode 字符串的想法与 ElementTree 不同,本文给大家介绍python中lxml.etree 和 ElementTree 的区别,感兴趣的朋友一起看看吧
    2024-01-01

最新评论