Python字典进阶:遍历、浅拷贝与常用方法详解

沈知远
沈知远
发布时间:2026-10-15| 4人浏览过
原创

本文深入解析Python字典的高级操作,涵盖通过keys()和values()获取键值列表,演示items()遍历的高效写法。重点剖析copy()浅拷贝机制,解释引用传递导致的副作用,并介绍fromkeys()创建新字典的用法。通过完整代码示例展示字典增删查改及拷贝的实际效果,帮助开发者掌握字典操作的细节与陷阱。

在前文中,学委已经介绍了字典的基本概念以及基础的增删查改操作。今天我们将补充介绍其他实用的字典函数,进一步完善知识体系。

dict 的元素定位(键/值定位)和遍历

对于 dict 对象,我们可以使用 keys() 方法来获取包含所有键的列表。

同样地,通过 values() 方法可以获取包含所有值的列表。

一旦获得了这些列表,我们就可以对字典对象进行遍历操作。

不过,在实际开发中,我们更倾向于使用以下这种更简洁的风格:


mydict = {
    'name': 'leixuewei',
    'date': '20211104'
}
print("遍历字典-----开始")
for k, v in mydict.items():
    print("key[%s] = value[%s]" % (k, v))  # 直接打印
print("遍历字典-----结束")

这几行代码可以直接复制并运行,无需额外配置。

下面学委准备了一份更全面的代码示例,展示了获取 key/value 以及遍历操作的多种写法:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/3 11:34 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : dict_demo3.py
# @Project : hello

# 比如学委的信息作为一个字典
info_dict = dict()
info_dict['name'] = 'LEI_XUE_WEI'  # 或者改为 'levin'
info_dict['blogs'] = '93'  # 目前发表了93个博客文字。
info_dict['gongzhong_hao'] = '【雷学委】'  # 欢迎过来关注支持
info_dict['meta-data'] = dict()
print("包含特定key ?%s" % ('gongzhong_hao' in info_dict))
print('所有键的列表:%s ' % info_dict.keys())
print('所有值的列表:%s ' % info_dict.values())
print('获取key对应的值:', info_dict['name'])
# 获取但是不设置到info_dict内
print('获取key DemoKey 对应的值:', info_dict.get('DemoKey', '匿名用户雷学委'))
# print('获取key对应的值:', info_dict['DemoKey']) #这句会抛出异常:KeyError: 'DemoKey'
# 如果没有某个key,进行设置默认值并返回
print('获取key name对应的值:', info_dict.setdefault('name', '匿名用户雷学委'))
print('获取key DemoKey 对应的值:', info_dict.setdefault('DemoKey', '匿名用户雷学委'))
print('获取key DemoKey 对应的值:', info_dict['DemoKey'])
print("遍历字典-----开始")
for key, value in info_dict.items():
    print("\tkey[%s] = value[%s]" % (key, value))
print("遍历字典-----结束")
info_dict.clear()  # 清空整个字典对象

运行效果如下所示:

这些操作虽然基础,但必须做到熟练于心,因此需要反复练习直至形成肌肉记忆。

dict的复制(拷贝)

字典的复制可以使用 copy 函数来实现,但需要注意的是,这是一种浅拷贝,即拷贝了但不完全拷贝。

简单来说,浅拷贝会复制键(key),但新字典中的值仍然沿用旧字典中值的引用地址。

这里顺便提及 fromkeys 函数,该函数用于创建新字典,它只接受键列表作为参数,新字典内的所有值默认均为空(None)。

说了这么多理论,我们直接通过代码示例来验证:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/3 11:34 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : dict_demo4.py
# @Project : hello
'''dict的拷贝问题'''
# 比如学委的信息作为一个字典
info_dict = dict()
info_dict['name'] = 'LEI_XUE_WEI'  # 或者改为 'levin'
info_dict['blogs'] = '93'  # 目前发表了93个博客文字。
info_dict['gongzhong_hao'] = '【雷学委】'  # 欢迎过来关注支持
info_dict['meta-data'] = dict()
# 选择指定key列表局部拷贝
keys_copied_dict = info_dict.fromkeys(['name', 'blogs', 'zone'])
print("keys_copied_dict :", keys_copied_dict)
# 浅拷贝//Shadow Copy: 全拷贝但不完全拷贝
copied_dict = info_dict.copy()
print("copied_dict :", copied_dict)
shadow_copied_dict = info_dict.copy()
print('shadow_copied_dict:', shadow_copied_dict)
## 雷学委提示:下面一行代码修改了‘meta-data'这个key对应的值,我们并没有直接修改shadow_copied_dict
info_dict['meta-data']['date'] = '04 Nov 2021'
print('info_dict:', info_dict)
print('shadow_copied_dict:', shadow_copied_dict) # 这里输出看到变化也传递给了 shadow_copied_dict

print("*"*16 + "清空info_dict")
info_dict.clear()
print('info_dict:', info_dict)  # clear 清空元素后 打印info_dict
print('shadow_copied_dict:', shadow_copied_dict)  # clear 清空元素后打印 copied_dict

运行效果如下:

总结

本文内容到此结束,希望能为各位带来帮助。同时也欢迎大家关注本站,获取更多技术干货!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。