返回

Python 有序字典的两大惊喜:从 3.6 到 3.11~~

后端

Python 有序字典,从 Python 3.6 开始,普通的字典会记住其插入的顺序,当遍历字典时,你会获得字典中元素的顺序跟它们插入时的顺序相同。在 3.6 之前,字典是无序的,遍历顺序是随机的。

有序字典提供了两个鲜为人知但非常有用的功能,即 move_to_end()popitem() 方法,这篇文章将深入探讨这两个方法的使用场景和最佳实践,帮助 Python 开发者充分利用有序字典的强大功能,从而提高代码的效率和可读性。

惊喜一:move_to_end() 方法

move_to_end() 方法可以将一个键值对移动到有序字典的末尾或开头,它有两个参数:keylastkey 是要移动的键,last 是一个布尔值,表示是否将键值对移动到末尾。如果 lastTrue,则将键值对移动到末尾;如果 lastFalse,则将键值对移动到开头。

举个例子,假设我们有一个有序字典 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() 方法可以从有序字典中删除并返回一个键值对。它有两个参数:lastdefaultlast 是一个布尔值,表示是否从末尾删除键值对。如果 lastTrue,则从末尾删除键值对;如果 lastFalse,则从开头删除键值对。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 有序字典中非常有用的两个方法,它们可以帮助开发者提高代码的效率和可读性。通过理解这两个方法的使用场景和最佳实践,开发者可以充分利用有序字典的强大功能,从而编写出更加简洁、高效的代码。