0Pricing
Python Academy · 课时

namedtuple 与 OrderedDict

其他实用集合

namedtuple 与 OrderedDict 是 CoddyKit 上的免费 Python Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。

另外两个实用集合

collections 模块包含用于创建可读的类记录元组的 namedtuple,以及提供额外顺序操作方法的 OrderedDict。

请使用 from collections import namedtuple, OrderedDict 导入它们。

from collections import namedtuple, OrderedDict
print(namedtuple)
print(OrderedDict)

定义命名元组

namedtuple(name, fields) 会创建一个新的元组子类。您需要传入类型名称和字段名称列表。结果是一个可以实例化的类。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p)

按名称访问

主要优势是:您可以按名称读取字段,而不是使用难以理解的索引编号,这会让代码的可读性大幅提升。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x)
print(p.y)

仍然是元组

命名元组是真正的元组,因此索引、解包和迭代仍然有效。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p[0])
x, y = p
print(x + y)

不可变但可替换

与所有元组一样,命名元组不可变。若要获取修改后的副本,请使用 ._replace(),它会返回一个新实例。

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
q = p._replace(y=10)
print(p)
print(q)

转换为字典

._asdict() 会将命名元组转换为普通字典,将字段名称映射到对应的值。

from collections import namedtuple
Car = namedtuple('Car', ['make', 'year'])
c = Car('Toyota', 2026)
print(c._asdict())

默认值

定义命名元组时提供 defaults。默认值会应用于最右侧的字段,因此创建实例时可以省略这些字段。

from collections import namedtuple
User = namedtuple('User', ['name', 'role'], defaults=['guest'])
print(User('Alice'))
print(User('Bob', 'admin'))

检查字段

._fields 属性会列出字段名称,对于自省或构建通用代码很有用。

from collections import namedtuple
Color = namedtuple('Color', ['r', 'g', 'b'])
print(Color._fields)

OrderedDict 基础

OrderedDict 会记住插入顺序。Python 3.7 及更高版本中的普通字典也会保持顺序,但 OrderedDict 还提供额外的顺序相关方法,这是其他方式无法获得的。

from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
print(od)

move_to_end

.move_to_end(key) 会将一个键移到末尾(使用 last=False 时移到开头)。这是 OrderedDict 独有的功能,适合实现 LRU 风格的逻辑。

from collections import OrderedDict
od = OrderedDict(a=1, b=2, c=3)
od.move_to_end('a')
print(list(od.keys()))
od.move_to_end('c', last=False)
print(list(od.keys()))

顺序相关的相等性

两个 OrderedDict 对象只有在其中的元素顺序相同时才相等。普通字典在比较时会忽略顺序。

from collections import OrderedDict
a = OrderedDict([('x', 1), ('y', 2)])
b = OrderedDict([('y', 2), ('x', 1)])
print(a == b)
print(dict(a) == dict(b))

快速检查

由于命名元组不可变,如何创建它的修改副本?

回顾:命名元组与 OrderedDict

总结:

  • namedtuple(name, fields) 会创建支持按名称访问的可读、不可变记录。
  • 使用 ._replace() 创建修改后的副本,使用 ._asdict() 将其转换为字典。
  • OrderedDict 会保留插入顺序,并添加 .move_to_end()。
  • OrderedDict 的相等性与顺序有关,而普通字典不是这样。
from collections import namedtuple
Pt = namedtuple('Pt', ['x', 'y'])
print(Pt(1, 2)._asdict())

常见问题解答

「namedtuple 与 OrderedDict」课时是免费的吗?

是的 — 「namedtuple 与 OrderedDict」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。

「namedtuple 与 OrderedDict」这节课中我会学到什么?

其他实用集合 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Python Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「namedtuple 与 OrderedDict」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Python Academy 课中编写并运行代码吗?

能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple 与 OrderedDict
← 返回 Python Academy