Python有序字典(OrderedDict)完全指南:用法、实例与性能分析

Python的OrderedDict是一个字典子类,它会保持项目插入的顺序。当我们遍历OrderedDict时,项目会按照它们被插入的顺序返回。普通字典不会追踪插入顺序。因此,在对其进行迭代时,项目会按照任意的顺序返回。当我们想要确保项目按照插入的顺序返回时,我们可以使用OrderedDict。

Python有序字典

  • OrderedDict是Python collections模块的一部分。
  • 我们可以创建一个空的OrderedDict并向其中添加项目。如果我们通过传递一个dict参数来创建OrderedDict,那么顺序可能会丢失,因为dict不维护插入顺序。
  • 如果OrderedDict中的项目被覆盖,它的位置将被保持。
  • 如果一个项目被删除并再次添加,那么它将移动到最后。
  • OrderedDict的popitem方法按照FIFO(先进先出)顺序移除项目。它接受一个布尔参数last,如果设置为True,则项目按照LIFO(后进先出)顺序返回。
  • 我们可以使用move_to_end函数将项目移动到OrderedDict的开头或结尾。它接受一个布尔参数last,如果设置为False,则项目被移动到有序字典的开头。
  • 从Python 3.6开始,传递给OrderedDict构造函数的关键字参数的顺序会被保留,参考PEP-468。
  • 我们可以将reversed()函数与OrderedDict一起使用,以相反的顺序迭代元素。
  • OrderedDict对象之间的相等性测试是顺序敏感的,并实现为list(od1.items())==list(od2.items())。
  • OrderedDict与其他Mapping对象之间的相等性测试是顺序不敏感的,就像常规字典一样。这允许OrderedDict对象在任何使用常规字典的地方被替代。

Python有序字典示例

让我们看一些Python OrderedDict的代码示例。

创建有序字典对象

from collections import OrderedDict

# 创建一个简单字典
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# 创建空有序字典
ordered_dict = OrderedDict()
print(ordered_dict)

# 从字典创建有序字典
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)

结果:

OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])

在有序字典(OrderedDict)中添加、替换、移除项目。

# 向字典添加元素
ordered_dict['dog'] = 3

# 替换字典键值
ordered_dict['kiwi'] = 10
print(ordered_dict)

# 删除并添加一个值
ordered_dict.pop('kiwi')
print(ordered_dict)
ordered_dict['kiwi'] = 4
print(ordered_dict)

输出:

OrderedDict([('kiwi', 10), ('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3), ('kiwi', 4)])

有序字典 move_to_end 示例

# 将apple移动到末尾,将dog移动到开头
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)

输出:

OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4), ('apple', 5)])

有序字典popitem示例

# 弹出最后一项
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

输出:

('apple', 5)
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4)])

有序字典的逆向迭代

# 逆向迭代
for item in reversed(ordered_dict):
    print(item)

输出:

kiwi
cat
dog

有序字典的相等性测试示例

# 相等性测试
d1 = {'a': 'A', 'b': 'B'}
d2 = {'b': 'B', 'a': 'A'}

od1 = OrderedDict({'a': 'A', 'b': 'B'})
od2 = OrderedDict({'b': 'B', 'a': 'A'})

print(d1 == d2)
print(od1 == od2)
print(d1 == od1)

输出:

True
False
True

你可以从我们的GitHub代码库中下载完整的示例代码。

参考资料:Python文档

bannerAds