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

collections模块中的OrderedDict类详解

发布时间:2024-01-02 16:41:08

在Python中,collections模块提供了一个OrderedDict类,它是一个有序的字典,可以记住字典中元素的插入顺序。OrderedDict类的实现与标准字典类(dict)的实现非常相似,但它额外维护了一个双向链表,用来表示元素插入的顺序。

下面是OrderedDict类的一些常用方法:

1. __init__

- 初始化一个空的OrderedDict对象。

- 语法:OrderedDict([items])

2. __setitem__

- 添加一个新的键值对或更新已存在的键值对。

- 语法:ordered_dict[key] = value

3. popitem

- 移除并返回字典中的一个键值对。

- 如果字典为空,抛出KeyError异常。

- 语法:ordered_dict.popitem(last=True)

4. move_to_end

- 将指定的键移动到OrderedDict的末尾。

- 语法:ordered_dict.move_to_end(key, last=True)

5. pop

- 移除并返回指定键的值。

- 如果键不存在,返回默认值。

- 语法:ordered_dict.pop(key, default)

6. clear

- 清空OrderedDict中的所有键值对。

- 语法:ordered_dict.clear()

下面是一个使用OrderedDict的例子,假设我们有一个记录学生考试成绩的程序,我们希望根据学生的名字来存储成绩,并且希望打印成绩时按照学生姓名的字母顺序排序:

from collections import OrderedDict

# 创建一个空的OrderedDict对象
scores = OrderedDict()

# 输入学生姓名和成绩,以字母‘q’结束
while True:
    name = input("请输入学生姓名(输入q结束):")
    if name == 'q':
        break
    score = float(input("请输入学生成绩:"))
    scores[name] = score

# 按学生姓名的字母顺序打印成绩
for name, score in sorted(scores.items()):
    print("{} 的成绩是 {}".format(name, score))

在上述例子中,我们首先使用OrderedDict创建了一个空的scores字典。然后,我们在循环中接受用户的输入,将用户输入的学生姓名作为字典的键,将学生的考试成绩作为字典的值。

最后,我们通过使用sorted方法对OrderedDict的items()方法返回的键值对进行排序,按照学生姓名的字母顺序打印成绩。由于OrderedDict记住了元素的插入顺序,所以它会按照我们输入的顺序打印成绩。