Python Counter详解:字典创建、频次统计与元素修改陷阱
本文详解Python中collections.Counter类的四种字典创建方式,包括从可迭代对象、字典及关键字参数构建。重点解析Counter在统计Key出现频次及获取最高频项方面的优势,并深入探讨修改Value时的特殊行为:将Key的Value设为0不会删除该Key,需使用del语句真正移除元素,避免常见编程误区。
本文讨论的Counter源自Python标准库collections模块。利用Counter类,开发者可以便捷地创建字典结构,并自动统计其中Key出现的频率。在实际应用过程中,有几个关键细节需要特别注意,以确保代码的正确性和效率。
使用Counter构建字典主要包含四种常见模式。第一种模式是不传入任何参数,从而创建一个空的Counter对象。其余三种模式的具体实现及差异,将在下文通过代码示例逐一展示。
第二种创建方式的代码演示如下:
need python.'
cell1 =(2,2,3,5,5,4,3,2,1,1,2,3,3,2,2)
list1 =[2,2,3,5,5,4,3,2,1,1,2,3,3,2,2]
c1 = Counter(str1)
c2 =Counter(cell1)
c3 =Counter(list1)
print('c1is:'),c1.items()
print('c2is:'),c2.items()
print('c3is:'),c3.items()
执行上述代码后,输出结果如下:
E:\WorkSpace\05_数据分析\01_利用Python进行数据分析\第02章_引言>pythoncounter.py
c1 is: [(' ', 5),('e', 3), ('d', 1), ('f', 1), ('i', 2), ('h', 2), ('l', 1), ('o', 3), (',', 1),('p', 1), ('s', 2), ('r', 1), ('u', 1), ('t', 2), ('.', 1), ('y', 2), ('n', 2)]
c2 is: [(1, 2),(2, 6), (3, 4), (4, 1), (5, 2)]
c3 is: [(1, 2),(2, 6), (3, 4), (4, 1), (5, 2)]
上述三种构建方式具有共性:只要传入的对象是可迭代的(Iterable),Counter都能将其转换为字典形式。
第三种构建方法的代码示例如下:
from collectionsimport Counter
d1 ={'apple':5,'pear':2,'peach':3}
c1 = Counter(d1)
print(c1.items())
该段代码的运行结果如下:
E:\WorkSpace\05_数据分析\01_利用Python进行数据分析\第02章_引言>pythonexp1.py
[('pear', 2),('apple', 5), ('peach', 3)]
第四种构建方法的代码示例如下:
from collectionsimport Counter c1 = Counter(apple= 7,xiaomi = 5,oppo = 9) print(c1.items())
程序执行后的输出结果如下:
E:\WorkSpace\05_数据分析\01_利用Python进行数据分析\第02章_引言>pythonexp2.py
[('xiaomi', 5),('oppo', 9), ('apple', 7)]
从功能上看,第三种创建方式与普通字典的初始化差异不大。那么,Counter对象的核心优势何在?关键在于它内置了统计功能,能够自动计算并存储每个Key的出现次数。
以下是一个简化版的示例代码:
from collectionsimport Counter str1 = 'Life isshort, you need python.' c1 = Counter(str1) print(c1.items()) print(c1['i']) print(c1['e']) print(c1.most_common(5))
运行该代码后,结果如下:
E:\WorkSpace\05_数据分析\01_利用Python进行数据分析\第02章_引言>pythonexp3.py
[(' ', 5), ('e',3), ('d', 1), ('f', 1), ('i', 2), ('h', 2), ('L', 1), ('o', 3), (',', 1), ('p',1), ('s', 2), ('r', 1), ('u', 1), ('t', 2), ('.', 1), ('y', 2), ('n', 2)]
2
3
[(' ', 5), ('e',3), ('o', 3), ('i', 2), ('h', 2)]
从输出结果可以看出,Counter对象不仅具备普通字典的所有属性,还额外提供了统计Key数量的功能。通过调用特定方法(如most_common),可以方便地获取出现频率最高的前几项列表。
此外,Counter对象支持对Value进行修改。例如,若某个Key不存在,其默认统计数为0;但需要注意的是,统计数为0并不意味着该Key被移除。也就是说,直接将Key的Value赋值为0,并不能从Counter中删除该元素。
具体的演示代码如下:
from collectionsimport Counter str1 = 'Life isshort, you need python.' c1 = Counter(str1) print(c1.items()) print(c1['i']) c1['i'] = 0 print(c1['i']) print(c1.items()) del c1['i'] print(c1.items()
程序运行结果如下:
E:\WorkSpace\05_数据分析\01_利用Python进行数据分析\第02章_引言>pythonexp3.py
[(' ', 5), ('e',3), ('d', 1), ('f', 1), ('i', 2), ('h', 2), ('L', 1), ('o', 3), (',', 1), ('p',1), ('s', 2), ('r', 1), ('u', 1), ('t', 2), ('.', 1), ('y', 2), ('n', 2)]
2
0
[(' ', 5), ('e',3), ('d', 1), ('f', 1), ('i', 0), ('h', 2), ('L', 1), ('o', 3), (',', 1), ('p',1), ('s', 2), ('r', 1), ('u', 1), ('t', 2), ('.', 1), ('y', 2), ('n', 2)]
[(' ', 5), ('e',3), ('d', 1), ('f', 1), ('h', 2), ('L', 1), ('o', 3), (',', 1), ('p', 1), ('s',2), ('r', 1), ('u', 1), ('t', 2), ('.', 1), ('y', 2), ('n', 2)]
以上就是关于Python中Counter类在字典创建及Key数量统计方面的详细介绍。希望这些内容能为您提供参考,欢迎继续支持本站获取更多技术分享。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









