首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >oeasy python 133 删除字典项 del remove

oeasy python 133 删除字典项 del remove

原创
作者头像
oeasy
发布2026-07-24 09:17:04
发布2026-07-24 09:17:04
1310
举报

删除字典项_del_pop_popitem_字典深浅拷贝

回忆

  • 上次学习了字典
    • 字典 可以 读取和赋值
    • 字典项 可以 增删改
      • 直接 用key 索引
      • del 删除字典项
      • update 更新
  • 还有什么方法 可以删除 吗???🤔

pop

  • 回忆列表
代码语言:javascript
复制
lst = list(range(6))
lst
  • 先回忆 list.pop
  • 从 栈顶 弹栈
代码语言:javascript
复制
lst.pop()
lst
  • 弹出最后一个
  • 回忆 弹栈

弹栈

  • pop the stack
    • 弹栈
  • LIFO
    • Last In First Out
    • 后入先出
  • 可以要求 弹谁 吗?

弹出 指定列表项

  • 要求弹出2
代码语言:javascript
复制
lst.pop(2)
  • 从列表中删除
    • 并 返回列表项
  • 如果 再pop(2)
代码语言:javascript
复制
lst.pop(2)
  • 找到新的第2项 弹出
  • 列表项不存在呢?
代码语言:javascript
复制
lst.pop(100)
lst
  • 报索引错误
  • 再来看 字典

pop

代码语言:javascript
复制
d = {    
    "cat": "miao",
    "dog": "wang"
}
  • 直接弹栈
代码语言:javascript
复制
d.pop()
  • 不知道 弹谁
    • 报 KeyError

弹出指定字典项

  • 用pop方法 删除key
代码语言:javascript
复制
d
d.pop("cat")
d
d.pop("dog")
d
  • 在字典里 找key
    • 找到了 就删除
    • 返回 value
  • pop方法 没有找到key 呢?

没有找到

代码语言:javascript
复制
d
d.pop("rat")
  • 没有找到
    • 抛出异常
  • 除非 有第二个参数
代码语言:javascript
复制
d.pop("rat", "notfound")
  • 有第二个参数的话
    • 就返回 第二个参数
  • 观察文档

pop

代码语言:javascript
复制
help(dict.pop)
  • 弹栈
  • dict.pop和list.pop
    • 有啥区别吗?

两种类型的 pop

特点

list.pop()

dict.pop()

参数

索引 index

键 key

无参数

弹栈顶

报错

返回值

被弹元素

被弹键 对应的值

不存在

报错

报错 / 设默认值 就 不报错

  • 时间复杂度 如何?

时间复杂度

  • dict.pop 时间复杂度为O(1)
    • list.pop(i) 时间复杂度 O(n)
    • 字典删除效率更高
    • 不过需要空间更大
代码语言:javascript
复制
d.pop()
  • 不支持 无参数 弹栈
  • 想要 无参弹栈 怎么办?

求助

  • 不用参数 的 popitem
代码语言:javascript
复制
help(dict.popitem)
  • 字典 非空
    • 弹出最后一个
  • 后入字典的 先弹出
    • 由此可见 字典 是 有顺序的

实践

代码语言:javascript
复制
d = {"cat": "miao"}
d["dog"] = "wang"
d
  • 先弹出 后面的dog
    • 再弹出 前面的cat
代码语言:javascript
复制
d.popitem()
d
d.popitem()
d
d.popitem()
d
  • 弹到 字典空了
    • 直接抛出异常

字典的顺序

  • 这两个字典不一样
代码语言:javascript
复制
d = {"cat": "miao"}
d["dog"] = "wang"

d2 = {"dog": "wang"}
d2["cat"] = "miao"

d
d2
  • 第一个弹出的 字典项 也不一样
  • 字典可以拷贝吗?

基础拷贝

代码语言:javascript
复制
colors = {
    "red": "f00",
    "blue": "0f0",
}
colors2 = colors
  • =是直接 赋字典地址
    • 两个字典指向相同位置

copy

代码语言:javascript
复制
colors = {
    "red": "f00",
    "blue": "0f0",
}
colors2 = colors.copy()
  • 拷贝是复制出一个字典
  • 但是拷贝是浅拷贝
    • shallow copy

浅拷贝

  • 字典某个键的值 是
    • 一个列表时
    • 浅拷贝只能拷贝列表地址
代码语言:javascript
复制
colors = {
    "red": ["f00","ff0000"],
    "blue": "0f0",
}
colors2 = colors.copy()
  • 两个新字典中"red"对应的值是同一个列表 list
  • 换成深拷贝

深拷贝

  • 深拷贝深拷贝
    • 深层次的拷贝
代码语言:javascript
复制
from copy import deepcopy
colors = {
    "red": ["f00","ff0000"],
    "blue": "0f0",
}
colors2 = deepcopy(colors)
  • 彻底分配了 新空间
  • 如果列表 作为key可以吗?

列表作为key

代码语言:javascript
复制
d = {
    ["f00", "ff0000"]: "red"
}
  • 报错
    • key 必须是 可哈希的
  • list是变量
    • 不可哈希

总结

  • 这次学习了字典
    • 字典 可以 读取和赋值
    • 字典项 可以 增删改
      • 直接 用key 索引
      • del 删除字典项
      • update 更新
      • pop 弹栈
      • popitem 顺序弹栈
  • 字典 有什么 实际应用吗??🤔
  • 下次再说!👋🏻
  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 删除字典项_del_pop_popitem_字典深浅拷贝
  • 回忆
    • pop
    • 弹栈
    • 弹出 指定列表项
    • pop
    • 弹出指定字典项
    • 没有找到
    • pop
    • 两种类型的 pop
    • 时间复杂度
    • 求助
    • 实践
    • 字典的顺序
    • 基础拷贝
    • copy
    • 浅拷贝
    • 深拷贝
    • 列表作为key
    • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档