Python中_Collections模块中的有序字典_OrderedDict()详解
在Python中,有一个非常有用的模块 _collections,它提供了一些额外的数据结构和工具,可以帮助我们更高效地处理数据。其中之一是有序字典 OrderedDict()。
有序字典是一种字典类型,它可以记住键值对的添加顺序。与普通字典不同的是,它会维护添加顺序,当我们迭代它时,会按照键值对被添加的顺序来返回。
请注意,Python3.7及更高版本的字典类型(dict)默认是有序的,这意味着你无需使用 OrderedDict(),如果你使用的是Python3.7以上的版本。
让我们看一下 OrderedDict()的使用方法:
from collections import OrderedDict
1. 创建有序字典:
我们可以使用 OrderedDict()函数来创建一个新的有序字典。我们可以按照键的添加顺序来添加键值对,或者使用传入的可迭代对象来初始化有序字典。
# 创建一个空的有序字典
ordered_dict = OrderedDict()
# 使用键的添加顺序来添加键值对
ordered_dict['a'] = 1
ordered_dict['b'] = 2
ordered_dict['c'] = 3
print(ordered_dict) # 输出 OrderedDict([('a', 1), ('b', 2), ('c', 3)])
# 使用可迭代对象来初始化有序字典
initial_dict = {'a': 1, 'b': 2, 'c': 3}
ordered_dict = OrderedDict(initial_dict)
print(ordered_dict) # 输出 OrderedDict([('a', 1), ('b', 2), ('c', 3)])
当我们打印有序字典时,会显示所有的键值对,并按照添加的顺序进行排序。
2. 有序字典的常用操作:
有序字典支持与普通字典相同的操作,包括添加键值对、删除键值对、获取值、判断键是否存在等。此外,还有一些特定于有序字典的方法。
# 添加键值对
ordered_dict['d'] = 4
# 删除键值对
del ordered_dict['a']
print(ordered_dict) # 输出 OrderedDict([('b', 2), ('c', 3), ('d', 4)])
# 获取值
value_b = ordered_dict['b']
print(value_b) # 输出 2
# 判断键是否存在
contains_b = 'b' in ordered_dict
print(contains_b) # 输出 True
# 获取有序字典的长度
length = len(ordered_dict)
print(length) # 输出 3
3. 有序字典的迭代顺序:
在迭代有序字典时,键值对会按照它们被添加的顺序返回。
for key, value in ordered_dict.items():
print(key, value)
# 输出:
# b 2
# c 3
# d 4
有序字典还提供了一些其他有用的方法,例如:
- popitem(last=True):删除并返回有序字典中的最后一对键值对(或 对键值对,如果last=False)。
- move_to_end(key, last=True):将指定的键移动到有序字典的末尾(或开头,如果last=False)。
总结:
有序字典 OrderedDict()是Python中非常实用的一个数据结构,它可以记住键值对的添加顺序。在某些场景下,有序字典可以提供比普通字典更好的性能和功能。
例子:
让我们假设我们要统计一段文本中各个单词出现的次数,并按照出现次数从高到低进行排序。
from collections import OrderedDict
text = "this is an example sentence that contains some words. sentence words words example."
# 初始化一个字典来存储各个单词的出现次数
word_counts = {}
# 遍历文本,统计单词出现次数
for word in text.split():
# 如果单词已经在字典中,则增加其出现次数
if word in word_counts:
word_counts[word] += 1
# 否则将单词添加到字典中
else:
word_counts[word] = 1
# 创建一个有序字典,按照出现次数进行排序
ordered_word_counts = OrderedDict(sorted(word_counts.items(), key=lambda x: x[1], reverse=True))
# 输出按照出现次数从高到低排序的单词及其对应的出现次数
for word, count in ordered_word_counts.items():
print(word, count)
# 输出:
# words 3
# example 2
# sentence 2
# this 1
# is 1
# an 1
# contains 1
# some 1
通过使用有序字典,我们可以方便地按照出现次数对单词进行排序,并输出结果。
