Python 有序字典

Python 有序字典

前言

在许多编程语言中,字典(dictionary)是一种非常有用的数据结构,它能通过键(key)快速查找对应的值(value)。而在 Python 中,字典是一种非常重要的数据类型,它可以很方便地用来存储和操作数据。然而,在一些情况下,我们需要保留字典中键值对的插入顺序,这时候就需要使用有序字典了。

什么是有序字典

有序字典(OrderedDict)是一个 Python 内置模块 collections 里的字典子类,它可以维护键值对插入的顺序。与常规字典不同的是,当对有序字典进行迭代时,它会按照插入顺序依次输出键值对,而不是按照键的顺序或者是随机顺序。

下面是一个简单的例子,展示了有序字典和普通字典的区别:

from collections import OrderedDict

# 普通字典插入顺序不确定
d = {}
d['a'] = 1
d['b'] = 2
d['c'] = 3
print(d)  # {'a': 1, 'b': 2, 'c': 3}

# 有序字典会维护插入顺序
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
print(od)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])

可以看到,当使用普通字典时,其键值对的顺序是不确定的。而在使用有序字典时,通过输出的结果可以发现它保留了插入顺序。

有序字典的使用

创建有序字典

创建有序字典的方法与创建普通字典相同,只需使用 OrderedDict() 函数即可:

from collections import OrderedDict

od = OrderedDict()

添加键值对

添加键值对到有序字典的方法跟普通字典一样:

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3

访问键值对

有序字典的键值对可以通过索引和键来访问:

od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od[0])  # KeyError: 0
print(od['a'])  # 1

可以看到,通过索引访问有序字典会触发 KeyError 异常,而通过键来访问则能正确获取值。

修改键值对

与普通字典相同,有序字典的键值对也是可以被修改的:

od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od['a'] = 4
print(od)  # OrderedDict([('a', 4), ('b', 2), ('c', 3)])

删除键值对

由于有序字典维护了键值对的插入顺序,所以删除键值对时可以选择按照键或者索引来指定需要删除的元素。与普通字典一样,使用 del 关键字即可删除键值对:

od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
del od['a']
print(od)  # OrderedDict([('b', 2), ('c', 3)])

迭代有序字典

有序字典按照插入顺序维护了键值对的次序,因此在迭代有序字典时,它会按照插入顺序依次输出键值对。

od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
for key, value in od.items():
    print(key, value)
# a 1
# b 2
# c 3

可以看到,按照键值对的插入顺序依次输出了各元素的键和值。

反转有序字典

在某些情况下,需要翻转有序字典的键和值。可以使用 reversed() 函数反转键和值:

od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
reversed_od = OrderedDict(reversed(list(od.items())))
print(reversed_od)  # OrderedDict([(3, 'c'), (2, 'b'), (1, 'a')])

利用有序字典对数据进行排序

有序字典同样可以用来对数据进行排序。可以使用 sorted() 函数和 lambda 表达式来根据元素的值对它们进行排序:

from collections import OrderedDict

d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
od = OrderedDict(sorted(d.items(), key=lambda t: t[1]))
print(od)  # OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

可以看到,使用 sorted() 函数和 lambda 表达式对字典进行排序后,得到了一个有序字典。

结论

有序字典是 Python 中一个非常实用的数据结构,它可以帮助开发者在某些特定的场合下保留字典中元素的插入顺序。使用有序字典的时候,需要注意的是它是 collections 模块中的一个字典子类,因此需要使用相应的方式来创建和操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程