Python中的OrderedDict与dict:适合工作的工具--第二篇

第一个 for 循环直接遍历键的键。其他三个循环使用字典方法遍历的项目、键和值。以相反的顺序迭代 reversed()自 Python 3.5 以来,有序字典支持使用 reversed() 进行反向迭代。此功能已添加到 Python 3.8 的常规字典中。因此,如果代码使用它,则后向兼容性受到常规字典的更多限制。可以使用 reversed...
Python中的OrderedDict与dict:适合工作的工具--第二篇
Python入门 OrderedDict

OrderedDict 是 Python 中的一个字典子类,它保留了键值对插入的顺序。在进行迭代时,会按照原始顺序遍历所有项目。如果更新现有键的值,顺序保持不变;如果删除项目并重新插入,则该项目将添加到字典末尾。

作为字典子类,OrderedDict 继承了常规字典的所有方法。此外,它还具有其他功能,将在后续教程中介绍。在此节中,将学习如何在代码中创建和使用有序字典。

创建有序字典对象

创建有序字典对象的第一步是从 collections 模块导入类。有几种创建有序字典的方法,与创建常规字典对象的方式相似。例如,可以通过实例化不带参数的类来创建一个空的对象:

创建一个空的有序字典,无需向构造函数提供参数。

通过在方括号([])中提供键并将值分配给该键,可以将键值对添加到字典中。引用时,将获得一个迭代的键值对,这些键值对按插入到字典中的顺序保存项目。

还可以将项目的可迭代项作为参数传递给构造函数:

当使用序列时,所得有序字典中各项的顺序与输入序列中各项的原始顺序匹配。如果使用列表、元组或集合,则创建之前项的最终顺序是未知的。

如果您使用常规字典作为有序字典对象的初始化程序,并且使用的是 Python 3.6 或更高版本,则会遵循以下行为:

有序字典中的项目顺序与原始字典中的顺序匹配。另一方面,如果使用的 Python 版本低于 3.6,则项目顺序是未知的。

从 Python 3.6 开始,函数保留调用中传递的关键字参数的顺序。因此,有序字典中各项的顺序与将关键字参数传递给构造函数的顺序匹配。在早期版本中,该顺序是未知的。

最后,有序字典还提供了 fromkeys() 方法,可以从可迭代的键创建一个新的字典,并将所有值设置为一个公共值:

使用键列表作为起点创建有序字典。第二个参数提供单个值给字典中的所有项目。

管理物品有序字典

由于有序字典是可变数据结构,因此可以对其实例执行变异操作。可以插入新项目、更新和删除现有项目等。如果将新项目插入现有的有序字典中,则项目将添加到词典末尾。

删除一个项目并插入同一项目的新实例,则新项目将添加到基础词典的末尾。

重新分配或更新有序字典对象中现有键值对的值,则键将保持其位置但会获得新值。同样,如果使用 .update() 方法修改现有键值对的值,则字典会记住键的位置并为其分配更新后的值。

遍历有序字典

就像一般的字典一样,可以使用多种工具和技术迭代有序字典的对象。可以直接按键迭代,或者使用字典的方法,如 .items()、.keys() 和 .values():

第一个 for 循环直接遍历键的键。其他三个循环使用字典方法遍历的项目、键和值。

以相反的顺序迭代 reversed()

自 Python 3.5 以来,有序字典支持使用 reversed() 进行反向迭代。此功能已添加到 Python 3.8 的常规字典中。因此,如果代码使用它,则后向兼容性受到常规字典的更多限制。

可以使用 reversed() 对有序字典的项目、键和值进行反向迭代:

本示例中的每个循环都用于 reversed() 以相反的顺序遍历有序字典的不同元素。

常规字典还支持反向迭代。但在低于 3.8 的 Python 版本中尝试使用常规 dict 对象的 reversed() 会得到 TypeError:

如果需要以相反的顺序遍历字典中的项目,那么有序字典是一个很好的选择。使用常规字典会降低后向兼容性,因为直到 Python 3.8 才将反向迭代添加到常规字典中。2024-11-20
mengvlog 阅读 101 次 更新于 2025-07-19 12:04:16 我来答关注问题0
  •  唔哩头条 pythonorderedset返回什么值

    1. Python内置了字典数据结构,它也被称为dictionary,在其他语言中通常被称作map。这种数据结构通过键-值(key-value)对进行存储,具有快速的查找速度。2. 假设需要根据同学的名字查找对应的成绩,使用字典来实现,只需要创建一个包含名字和成绩对照的表。无论这个表有多大,查找速度都不会变慢。3. 在...

  •  宸辰游艺策划 odict是什么意思?

    odict是Python语言中的一个内置模块,用于实现有序字典(Ordered Dictionary),字典中的键(Key)是有序的,这与Python的普通字典不同。odict是由collections模块提供的,它可以更好地控制字典的存储,从而提供更加灵活和高效的数据处理。odict的特点是有序、可变、无重复。由于它的有序性,可以按照添加...

  •  翡希信息咨询 【python床头书系列】python pd.cut参数属性方法用法权威详解

    2. bins 参数: 可以是一个整数,表示将数据分为多少个等宽的箱体。 也可以是一个列表,自定义每个箱体的边界。3. 标签控制: labels 参数:用于指定每个箱体的标签。如果省略,则默认使用从 0 开始的整数作为标签。 ordered 参数:指定返回的 Categorical 对象是否是有序的。默认为 True,即有序。如...

  •  对牛弹琴的程序猿 如何用python实现一个常转速判断他是不是一个有序叠加的数?

    在这个示例代码中,is_ordered_sum()函数接受一个整数参数num,并返回一个布尔值,表示这个数是否是有序叠加的数。函数首先将这个数按照位数进行分解,得到每一位上的数字,然后分别判断这些数字是否满足从左到右递增的条件和是否按照相同的增量递增。如果两个条件都满足,则返回True,否则返回False。

  •  文暄生活科普 python之Marshmallow使用

    为了维护序列化输出的字段顺序,可以将ordered选项设置为true。这将指示Marshmallow将数据序列化到collections.OrderedDict,从而保持字段顺序。在Web API中,dump_only和load_only参数用于标识只读与只写字段。dump_only字段在加载时被视为未知字段,而load_only字段在序列化时忽略。在序列化与反序列化时,可以...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部