Python OrderedDict

时间:2020-02-23 14:43:07  来源:igfitidea点击:

Python OrderedDict是一个dict子类,用于维护项目的插入顺序。
当我们遍历OrderedDict时,将按插入顺序返回项目。

常规词典无法跟踪插入顺序。
因此,当对其进行迭代时,将以任意顺序返回项目。
当我们要确保按插入顺序返回项目时,可以使用OrderedDict。

Python OrderedDict

  • OrderedDict是python集合模块的一部分。

  • 我们可以创建一个空的OrderedDict并向其中添加项目。
    如果我们通过传递dict参数来创建OrderedDict,则该顺序可能会丢失,因为dict无法维持插入顺序。

  • 如果某个项目在OrderedDict中被覆盖,则其位置将保持不变。

  • 如果一个项目被删除并再次添加,则它将移至最后一个。

  • OrderedDictpopitem以FIFO顺序删除项目。
    它接受布尔参数" last",如果将其设置为" True",则将按照LIFO顺序返回项目。

  • 我们可以使用move_to_end函数将一个项目移动到OrderedDict的开头或者结尾。
    它接受布尔参数" last",如果将其设置为" False",则项目将移至有序字典的开头。

  • 从python 3.6开始,保留传递给OrderedDict构造函数的关键字参数的顺序,请参阅PEP-468。

  • 我们可以对OrderedDict使用reversed()函数以相反的顺序迭代元素。

  • OrderedDict对象之间的相等性测试对顺序敏感,并且被实现为" list(od1.items())== list(od2.items())"。

  • 与常规字典一样,OrderedDict与其他Mapping对象之间的相等性测试对顺序不敏感。
    这样就可以在使用常规词典的任何地方替换OrderedDict对象。

Python OrderedDict示例

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

创建OrderedDict对象

from collections import OrderedDict

# creating a simple dict
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# creating empty ordered dict
ordered_dict = OrderedDict()
print(ordered_dict)

# creating ordered dict from dict
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)

输出:

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

从OrderedDict添加,替换,删除项目

# adding elements to dict
ordered_dict['dog'] = 3

# replacing a dict key value
ordered_dict['kiwi'] = 10
print(ordered_dict)

# removing and adding a value
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示例

# moving apple to end and dog to start
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示例

# pop last item
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

输出:

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

OrderedDict反向迭代

# reversed iteration
for item in reversed(ordered_dict):
  print(item)

输出:

kiwi
cat
dog

OrderedDict相等性测试示例

# equality tests
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