Python 有序字典

Python OrderedDict(有序字典)是一个继承自dict的子类,它保持了项目的插入顺序。当我们迭代一个OrderedDict时,项目以它们插入的顺序返回。普通字典不会跟踪插入顺序,因此在迭代时,项目以任意顺序返回。当我们希望确保项目按照插入顺序返回时,我们可以使用OrderedDict。

Python OrderedDict

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

Python 有序字典示例

让我们看一些 Python 有序字典的代码示例。

创建有序字典对象

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)])

OrderedDict 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)])

OrderedDict popitem 示例

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

输出:

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

OrderedDict 反向迭代

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

输出:

kiwi
cat
dog

OrderedDict相等性测试示例

# 相等性测试
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文档

Source:
https://www.digitalocean.com/community/tutorials/python-ordereddict