欢迎访问宙启技术站
智能推送

Python中_Collections模块中的有序字典_OrderedDict()详解

发布时间:2023-12-27 11:27:48

在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

通过使用有序字典,我们可以方便地按照出现次数对单词进行排序,并输出结果。