Python的隐藏宝藏:collections模块!

自由坦荡的智能 2025-03-18 01:02:52

defaultdict: 轻松处理缺失的键

从最流行的数据结构之一 defaultdict 开始。一旦你开始广泛使用 Python 的字典,就会出现一些问题。例如,默认情况下,当尝试访问不存在的键时,Python 字典会引发 KeyError。

使用 defaultdict,可以为缺失的键定义默认值,从而避免错误并减少样板代码。

示例:计算单词出现次数from collections import defaultdict# Create a defaultdict with default value of 0 for missing keysword_counts = defaultdict(int)# Count the occurrences of each word in a listwords = ["apple", "banana", "apple", "orange", "banana", "apple"]for word in words: word_counts[word] += 1# Output the word countsprint(word_counts)解释:

它有什么作用:

defaultdict(int) 创建一个字典,其中缺少的键默认为 0(来自 int() 函数)。每个单词都将被添加到字典中,如果尚不存在,则默认计数为 0。

优势:

避免使用 if 语句手动检查键是否存在。简化计数或分组等常见模式。计数器:简化计数变得简单

接下来我们有了 Counter!Counter 类用于对字符串或数字等可哈希对象进行计数。它非常适合于对集合中的项目进行计数,并为常见任务提供有用的方法。

示例:计算字符频率from collections import Counter# Count character frequencies in a stringtext = "hello world"char_count = Counter(text)# Get the 2 most common charactersmost_common_chars = char_count.most_common(2)# Output the character frequencies and top charactersprint("Character Frequencies:", char_count)print("Most Common Characters:", most_common_chars)解释:

它有什么作用:

Counter(text) 创建一个类似字典的对象,其中 key 是字符,值是它们的计数。most_common(2) 返回出现频率最高的两个项目。

优势:

非常适合快速频率分析。提供直观的方法,如 elements() (迭代所有计数的项目) 和 most_common()。namedtuple:可读和不可变的元组

如果你曾经使用过 Tuples,但希望获得比 item[0] 或 item[1] 更具可读性的访问,那么 namedtuple 适合你。它允许您创建具有命名字段的轻量级、不可变对象,将 Tuples 的简单性与 Class 属性的清晰度相结合。

示例:存储点坐标from collections import namedtuple# Define a namedtuple for 2D pointsPoint = namedtuple("Point", ["x", "y"])# Create Point objectsp1 = Point(3, 4)p2 = Point(5, 7)# Access values using named attributesprint("Point 1:", p1)print("Point 1 X:", p1.x)print("Point 1 Y:", p1.y)解释:

它有什么作用:

namedtuple("Point", ["x", "y"]) 定义具有命名字段 x 和 y 的元组。您可以使用点表示法(例如 p1.x)访问字段。

优势:

与常规元组相比(p1[0] 与 p1.x)相比,提高了可读性。对于定义完整类可能有点过头的小型不可变数据对象非常有用
0 阅读:0

自由坦荡的智能

简介:感谢大家的关注