collections模块中的OrderedDict类详解
在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记住了元素的插入顺序,所以它会按照我们输入的顺序打印成绩。
