Python 有序字典的两大惊喜:从 3.6 到 3.11~~
2023-12-23 04:05:06
Python 有序字典,从 Python 3.6 开始,普通的字典会记住其插入的顺序,当遍历字典时,你会获得字典中元素的顺序跟它们插入时的顺序相同。在 3.6 之前,字典是无序的,遍历顺序是随机的。
有序字典提供了两个鲜为人知但非常有用的功能,即 move_to_end()
和 popitem()
方法,这篇文章将深入探讨这两个方法的使用场景和最佳实践,帮助 Python 开发者充分利用有序字典的强大功能,从而提高代码的效率和可读性。
惊喜一:move_to_end()
方法
move_to_end()
方法可以将一个键值对移动到有序字典的末尾或开头,它有两个参数:key
和 last
。key
是要移动的键,last
是一个布尔值,表示是否将键值对移动到末尾。如果 last
为 True
,则将键值对移动到末尾;如果 last
为 False
,则将键值对移动到开头。
举个例子,假设我们有一个有序字典 my_dict
,其中包含以下键值对:
my_dict = OrderedDict([
('name', 'John Doe'),
('age', 30),
('city', 'New York'),
('country', 'USA')
])
如果我们想将键值对 ('country', 'USA')
移动到末尾,我们可以使用 move_to_end()
方法如下:
my_dict.move_to_end('country', last=True)
现在,my_dict
的顺序将变为:
my_dict = OrderedDict([
('name', 'John Doe'),
('age', 30),
('city', 'New York'),
('country', 'USA')
])
同理,如果我们想将键值对 ('name', 'John Doe')
移动到开头,我们可以使用 move_to_end()
方法如下:
my_dict.move_to_end('name', last=False)
现在,my_dict
的顺序将变为:
my_dict = OrderedDict([
('name', 'John Doe'),
('age', 30),
('city', 'New York'),
('country', 'USA')
])
惊喜二:popitem()
方法
popitem()
方法可以从有序字典中删除并返回一个键值对。它有两个参数:last
和 default
。last
是一个布尔值,表示是否从末尾删除键值对。如果 last
为 True
,则从末尾删除键值对;如果 last
为 False
,则从开头删除键值对。default
是一个可选参数,如果要删除的键值对不存在,则返回 default
。
举个例子,假设我们有一个有序字典 my_dict
,其中包含以下键值对:
my_dict = OrderedDict([
('name', 'John Doe'),
('age', 30),
('city', 'New York'),
('country', 'USA')
])
如果我们想从末尾删除键值对,我们可以使用 popitem()
方法如下:
key, value = my_dict.popitem(last=True)
现在,my_dict
的顺序将变为:
my_dict = OrderedDict([
('name', 'John Doe'),
('age', 30),
('city', 'New York')
])
同理,如果我们想从开头删除键值对,我们可以使用 popitem()
方法如下:
key, value = my_dict.popitem(last=False)
现在,my_dict
的顺序将变为:
my_dict = OrderedDict([
('age', 30),
('city', 'New York'),
('country', 'USA')
])
结语
move_to_end()
和 popitem()
方法是 Python 有序字典中非常有用的两个方法,它们可以帮助开发者提高代码的效率和可读性。通过理解这两个方法的使用场景和最佳实践,开发者可以充分利用有序字典的强大功能,从而编写出更加简洁、高效的代码。