Python字典操作进阶:存在性检查、popitem与深浅拷贝详解

许南星
许南星
发布时间:2026-10-12 | 2人浏览过
原创

本文详细解析Python字典的常见操作,包括使用in、not in及get()函数判断键是否存在,并指出get()在值为False或None时的局限性。深入讲解popitem()方法用于删除并返回末尾键值对的用法及空字典报错处理。最后通过代码示例对比浅拷贝与深拷贝在修改嵌套对象时的内存地址差异,帮助开发者准确掌握字典操作细节。

判断字典中的元素是否存在

在Python中,可以使用 in 与 not in 运算符来快速判断某个键是否存在于字典中。

key in dict   # 返回True或False
key not in dict   # 返回True或False

另一种方法是利用 get() 函数。该方法在键不存在时返回默认值(默认为None),通过判断返回值即可间接确认键的存在性。

bool(dict.get(key))   # 返回True或False

需要注意的是,如果字典中某个键对应的值为 False、0、''(空字符串)或 None 等 falsy 值,使用 get() 函数判断时可能会返回 False,从而导致误判。因此,这种方法在特定场景下不够准确。

具体示例如下:

字典中的 popitem() 函数

popitem() 方法用于删除字典中的最后一组键值对,并将其作为元组返回。

dict.popitem()  # 无需传参,返回被删除的键值对,用元组包裹,0索引是key,1索引是value

需要特别注意的是,如果字典为空,调用该方法会引发 KeyError 错误。

示例代码如下:

students = {
    '小明': '到',
    '小白': '在',
    '小黑': '在呢'
}
print(students.popitem())
print(students)
print(students.popitem()))
print(students)

所有数据类型与其布尔值

不同数据类型的布尔值转换示例如下:

a_1 = 1
a_2 = 0
print(bool(a_1))
print(bool(a_2))
print(bool(not a_1))
print(bool(not a_2))

深拷贝与浅拷贝总结

通过以下代码示例展示浅拷贝的行为:

浅拷贝:

import copy
dict_1 = {
    "course": "python",
    "name": {"web": ["django"]}
}
dict_2 = copy.copy(dict_1)
# 修改父对象
dict_2["db"] = "mysql"
# 打印父对象内存地址
print("dict_1:", dict_1, id(dict_1))
print("dict_2:", dict_2, id(dict_2))
# 修改子对象
dict_2["name"]["web"].append("flask")
# 打印子对象内存地址
print("dict_1['name']:", dict_1, id(dict_1["name"]))
print("dict_2['name']:", dict_2, id(dict_2["name"]))

运行结果:

将浅拷贝换成深拷贝后,运行结果:

到此这篇关于python中字典的常见操作总结2的文章就介绍到这了,更多相关python字典操作内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表