Python中的collections模块:列表、集合和字典的高级操作
Python中提供了一个集合(collections)模块,该模块为我们提供了一些有用的集合类,这些类扩展了公共的Python的数据集合。Python内置的数据集合如列表、元组、集合和字典等,这些集合类都是非常强大的,但是当需要处理大量的数据时,它们的性能可能受到影响。Python collections模块为开发人员提供了更多灵活的选项,可以帮助我们轻松处理各种类型的数据。
Python集合模块主要提供了三个有用的集合类:列表(defaultdict)、集合(Counter)和字典(OrderedDict)。理解这三个类的差别和它们的使用场景对Python开发人员非常重要。
defaultdict:
默认字典(defaultdict)类是Python中极其强大的集合类型之一。将默认字典与普通字典进行比较,两者之间的区别在于默认字典不会在处理缺失键时抛出KeyError。
例如,考虑以下代码段:
from collections import defaultdict
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(d.items())
输出如下:
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
在上面的示例程序中,如图所示,当我们创建默认字典时,我们需要指定一个默认值类型(int,list等)。当访问不存在的键时,默认字典将返回该类型的默认值(0或空列表)。在上面的示例程序中,我们创建了一个名为d的默认字典,其中默认值为list,当我们使用d[k].append(v)调用类似于列表预先处理的键值对时,它不会引发KeyError 异常。 相反,我们可以将值添加到该列表中。当我们使用for循环迭代键值对列表(s)时,键(k)是列表中的 个元素,值(v)是列表中的第二个元素。在循环中,我们使用d[k].append(v)将v添加到d[k]中,如果键不存在,则默认字典将自动添加一个列表并将其设为d[k]的值。
Counter:
Python集合模块中的Counter类是一个有用的类,可帮助快速计算可迭代对象中每个元素的出现次数。例如,如果您拥有一个包含许多文本行或Python源代码的单词列表,则可以使用Counter类来计算每个单词出现的次数。Counter类提供了许多有用的方法,例如most_common(),它返回最常出现的元素以及它们的计数。
例如,考虑以下Python代码段:
from collections import Counter
s = 'hello,world,hello,world,hello'
c = Counter(s.split(','))
print(c)
print(c.most_common(2))
输出如下:
Counter({'hello': 3, 'world': 2})
[('hello', 3), ('world', 2)]
在上面的示例程序中,如图所示,我们首先在字符串s中创建一个单词列表,该列表是使用字符串的split()方法生成的。然后,我们使用Counter类对单词列表进行计数,该列表包含“hello”和“world”单词的数量。最后,我们使用most_common(n)方法返回最常出现的元素及其出现次数。在上面的代码中,我们使用了参数“2”,所以它只返回了最频繁的两个元素列表。
OrderedDict:
Python中,字典(dict)是一种非常强大的数据类型,用于存储键值对。但是,在某些情况下,我们可能希望保留添加键值对的顺序。这时,Python集合模块中的有序字典(OrderedDict)就非常有用了。
例如,考虑以下Python代码段:
from collections import OrderedDict
d = OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3
d.move_to_end('a')
for key, value in d.items():
print(key, value)
在上面的代码段中,我们首先创建了一个名为d的有序字典。然后,我们向该字典中添加三个键值对,按顺序添加。接下来,我们使用move_to_end()方法将“a”键移动到字典的末尾。最后,我们使用for循环迭代字典中的键值对并将它们打印出来。由于字典是有序的,输出结果将反映键值对的添加顺序。 我们可以使用类似的技术和方法来执行其他有用的操作。
总结:
Python集合模块提供了许多有用的集合类,其中包括默认字典、计数器和有序字典等。理解集合模块中这些类的不同之处以及它们的使用场景对Python开发人员来说非常重要。 各位Python程序员可以按照自己的需求使用集合模块, 在处理数据结构、统计学习、机器学习等方面都会有比较好的体验。
