Python中有序字典的方法
有序字典 是一个字典,它记住第一次插入键的顺序。如果新条目覆盖现有条目,则原始插入位置保持不变。删除条目并重新插入会将其移至末尾。有序字典可以在使用哈希映射和队列的地方使用。它兼有两者的特点。像队列一样,它记住顺序,它还允许在两端插入和删除。和字典一样,它的行为也像哈希映射。
注意:从Python 3.6 开始,为传递给 OrderedDict 构造函数的关键字参数保留顺序,请参阅 PEP-468。
有序字典的方法
让我们看看有序字典提供的各种方法。
- 流行音乐():
此方法用于从头删除一个键。
句法:
popitem(last = True)
如果最后一个为 False,则此方法将从字典的开头删除一个键。这在队列中充当 FIFO(先进先出),否则它会从字典末尾删除键。
时间复杂度: O(1)。
为了更好地理解,请查看代码。
Python3
from collections import OrderedDict
ord_dict = OrderedDict().fromkeys('GeeksForGeeks')
print("Original Dictionary")
print(ord_dict)
# Pop the key from last
ord_dict.popitem()
print("\nAfter Deleting Last item :")
print(ord_dict)
# Pop the key from beginning
ord_dict.popitem(last = False)
print("\nAfter Deleting Key from Beginning :")
print(ord_dict)
Python3
from collections import OrderedDict
ord_dict = OrderedDict().fromkeys('GeeksForGeeks')
print("Original Dictionary")
print(ord_dict)
# Move the key to end
ord_dict.move_to_end('G')
print("\nAfter moving key 'G' to end of dictionary :")
print(ord_dict)
# Move the key to beginning
ord_dict.move_to_end('k', last = False)
print("\nAfter moving Key in the Beginning :")
print(ord_dict)
输出:
Original Dictionary
OrderedDict([(‘G’, None), (‘e’, None), (‘k’, None), (‘s’, None), (‘F’, None), (‘o’, None), (‘r’, None)])
After Deleting Last item :
OrderedDict([(‘G’, None), (‘e’, None), (‘k’, None), (‘s’, None), (‘F’, None), (‘o’, None)])
After Deleting Key from Beginning :
OrderedDict([(‘e’, None), (‘k’, None), (‘s’, None), (‘F’, None), (‘o’, None)])
- move_to_end():
此方法用于将字典的现有键移动到末尾或开头。此函数有两个版本 -
句法:
move_to_end(key, last = True)
如果最后一个为 True,则此方法将在最后移动字典的现有键,否则它将在开头移动字典的现有键。如果键在开始时移动,则它在队列中充当 FIFO(先进先出)。
时间复杂度: O(1)
Python3
from collections import OrderedDict
ord_dict = OrderedDict().fromkeys('GeeksForGeeks')
print("Original Dictionary")
print(ord_dict)
# Move the key to end
ord_dict.move_to_end('G')
print("\nAfter moving key 'G' to end of dictionary :")
print(ord_dict)
# Move the key to beginning
ord_dict.move_to_end('k', last = False)
print("\nAfter moving Key in the Beginning :")
print(ord_dict)
输出:
Original Dictionary
OrderedDict([(‘G’, None), (‘e’, None), (‘k’, None), (‘s’, None), (‘F’, None), (‘o’, None), (‘r’, None)])
After moving key ‘G’ to end of dictionary :
OrderedDict([(‘e’, None), (‘k’, None), (‘s’, None), (‘F’, None), (‘o’, None), (‘r’, None), (‘G’, None)])
After moving Key in the Beginning :
OrderedDict([(‘k’, None), (‘e’, None), (‘s’, None), (‘F’, None), (‘o’, None), (‘r’, None), (‘G’, None)])
move_to_end()函数的工作
基本上,此方法在字典 self.__map 的链表中查找链接,并更新链接及其邻居的前一个和下一个指针。它从其位置删除该元素,并根据参数值将其添加到末尾或开头。由于以下所有操作都需要恒定的时间,因此OrderedDict.move_to_end()的复杂性也是恒定的。