Python的集合模块,使用数据容器处理数据集合

学习如何使用ChainMapCounterOrderedDictUserDictUserListUserStringdefaultdictdequenamedtuple类来简化和优化代码。

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

图片

简介

Python是一种功能强大的编程语言,可以简化许多编程任务。它的标准库中有一个collections模块,提供了处理集合数据的有用容器数据类型。

ChainMap类将多个字典合并为一个映射。Counter类用于计算列表或其他可迭代对象中元素的出现次数。OrderedDict类保持其键的插入顺序。

还可以使用UserDictUserListUserString类创建常见数据类型的自定义版本。defaultdict类允许为字典中不存在的任何键指定默认值。

deque类是一种双端队列,可以从两端追加和弹出元素。namedtuple类创建具有命名字段的元组子类,使得处理复杂的数据结构更加容易。

使用这些来自collections模块的类可以简化和优化代码。

1、ChainMap:合并多个字典

ChainMap类允许将多个字典合并为一个映射。当用户希望像处理单个实体一样搜索多个字典时,这非常有用。接下来看一下它是如何工作的:

from collections import ChainMap

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
combined_dict = ChainMap(dict1, dict2)

print(combined_dict['a'])  # 输出:1 (from dict1)
print(combined_dict['b'])  # 输出:2 (from dict1)
print(combined_dict['c'])  # 输出:4 (from dict2)

2、Counter:计数可散列对象

Counter类是一种高效计数可散列对象的方法。它提供了一种清晰简洁的方式来统计项目。以下是一个简单的示例:

from collections import Counter

data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
counter = Counter(data)

print(counter)  # 输出:Counter({4: 4, 3: 3, 2: 2, 1: 1})

3、OrderedDict:保持元素顺序

OrderedDict类会记住项目插入的顺序。在元素顺序很重要的情况下,这一点至关重要。查看以下的示例:

from collections import OrderedDict

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

print(list(ordered_dict.keys()))  # 输出:['b', 'c', 'a']

4、UserDict、UserList、UserString:创建自定义容器

UserDictUserListUserString类提供了创建自定义字典类、列表类和字符串类对象的简便方法。可以从这些类继承,并根据需要自定义其行为。

from collections import UserDict, UserList, UserString

class MyDictionary(UserDict):
    def __missing__(self, key):
        return f"Key '{key}' not found"

my_dict = MyDictionary({'a': 1, 'b': 2})
print(my_dict['c'])  # 输出:Key 'c' not found

在这个示例中,本文定义了__missing__方法,如果不存在需要寻找的键,则返回一个指示未找到键的字符串,而不是像传统字典那样引发KeyError异常。

5、defaultdict:为缺失的键设置默认值

defaultdict类是内置字典类的一个子类。它会自动为缺失的键提供默认值,从而防止KeyError异常。下面是一个示例:

from collections import defaultdict

fruit_count = defaultdict(int)
fruit_count['apple'] += 1

print(fruit_count['apple'])  # 输出:1
print(fruit_count['banana'])  # 输出:0 (default value for int)

6、deque:双端队列

deque类实现了双端队列,对于从两端高效地追加和弹出元素非常有用。它特别适用于实现队列和堆栈。

from collections import deque

queue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
queue.append(4)
queue.append(5)

print(queue.popleft())  # 输出:1
print(queue.popleft())  # 输出:2
print(queue.pop())  # 输出:5
print(queue) # 输出:deque([3, 4])

7、namedtuple:命名元组以提高可读性

namedtuple类创建了一种新类型的元组,可以使用命名属性访问其中的字段。这不仅提高了清晰度,还减少了由于索引不匹配而导致出错的几率。

from collections import namedtuple

Person = namedtuple('Person', ['name', 'age', 'gender'])
person = Person('Alice', 30, 'female')

print(person) # 输出:Person(name='Alice', age=30, gender='female')

结论

Python的collections模块是开发人员处理数据集合时的有用工具。它提供了各种类,可以帮助完成合并字典、计数项和保持数据顺序等任务。通过使用这些类,可以使编码过程更加高效。

此外,collections模块还允许创建自定义容器,并使用特殊的数据结构,如dequenamedtuple。这些结构可以进一步增强编程能力,并帮助开发者轻松解决复杂的问题。

选择正确的类对于任务非常重要,因为这可以简化甚至最复杂的编码挑战。通过使用collections模块,可以灵活选择适合工作的正确工具,并使编码过程更加高效。因此,请探索collections模块,看看它如何帮助完成编码项目!

推荐书单

《Python从入门到精通(第3版)》

《Python从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分27章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、文件及目录操作、操作数据库、使用进程和线程、网络编程、异常处理及程序调试、Pygame游戏编程、推箱子游戏、网络爬虫开发、火车票分析助手、数据可视化、京东电商销售数据分析与预测、Web编程、Flask框架、e起去旅行网站、Python自动化办公、AI图像识别工具等内容。书中所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。

《Python从入门到精通(第3版)》icon-default.png?t=N7T8https://item.jd.com/14055900.html

精彩回顾

《使用Ray创建高效的深度学习数据管道》

《使用Ray轻松进行Python分布式计算》

《AI编程,详细比较GitHub Copilot对比Amazon CodeWhisperer》

《使用Python类型提示,保持代码整洁,提高可读性》

《10个提高Web开发效率的VS Code插件》

《5个实用的Python编程小技巧》

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

访问【IT今日热榜】,发现每日技术热点

猜你喜欢

转载自blog.csdn.net/weixin_39915649/article/details/135261024
今日推荐