collections模块之Counter计数器

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

Counter作为字典dict()的一个子类用来进行hashtable计数,将元素数量进行统计,计数后返回一个字典,键为元素,值为元素个数

from collections import Counter
​
​
str1 = "abcbcaccbbad"
li = ["a", "b", "c", "a", "b", "b"]
dict1 = {"1": 3, "3": 2, "17": 2}
​
#Counter获取各元素的个数,返回字典
print ("Counter(s):", Counter(str1))
print ("Counter(li):", Counter(li))
print ("Counter(d):", Counter(d))
复制代码

result:

Counter(s): Counter({'b': 4, 'c': 4, 'a': 3, 'd': 1})
Counter(li): Counter({'b': 3, 'a': 2, 'c': 1})
Counter(d): Counter({'1': 3, '3': 2, '17': 2})
复制代码

下面对其中几个重要的方法加以介绍

1 most_common方法

按照元素出现的次数进行从高到低的排序,返回元素的字典

1.1 默认情形

默认情形下返回所有元素的字典

print(Counter(str1).most_common())
复制代码

result:

[('b', 4), ('c', 4), ('a', 3), ('d', 1)]
复制代码

1.2 指定数量

指定数字为n时,返回排序前n位的元素字典

print(Counter(str1).most_common(2))
复制代码

result:

[('b', 4), ('c', 4)]
复制代码

2 elements方法

返回经过计算器Counter后的元素迭代器

2.1 字典情形

此时返回value个key的元素迭代器

dict1 = {"1": 3, "3": 2, "17": 2}
dict_counter = Counter(dict1)
print("sorted(str_iter):", sorted(dict_counter.elements()))
复制代码

result:

sorted(str_iter): ['1', '1', '1', '17', '17', '3', '3']
复制代码
print(list(dict_counter.elements()))
复制代码

result:

['1', '1', '1', '3', '3', '17', '17']
复制代码

可以看到,‘1'的值为3,所以返回了3个'1'。其余情形依次类推

2.2 其他

此时返回所有元素的迭代器

str1 = "abcbcaccbbad"
str1 = Counter(str1)
print ("sorted(str1.elements()):", sorted(str1.elements()))
复制代码

result:

sorted(str1.elements()): ['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'd']
复制代码
print(list(str1.elements()))
复制代码

result:

['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'd']
复制代码

3 update方法

对Counter里面的元素进行更新

dict1 = {"1": 3, "3": 2, "17": 2}
dict_counter = Counter(dict1)
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2})
复制代码

3.1 字典情形

dict_counter.update({'key':123})
print(dict_counter)
复制代码

result:

Counter({'key': 123, '1': 3, '3': 2, '17': 2})
复制代码
dict_counter.update({'key':456})
print(dict_counter)
复制代码

result:

Counter({'key': 579, '1': 3, '3': 2, '17': 2})
复制代码

可以看到,同一个key对应的value会叠加每次update对应的value作为最终的value

3.2 列表情形

dict_counter.update([123])
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 123: 1})
复制代码
dict_counter.update([123])
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 123: 2})
复制代码

3.3 字符串情形

dict_counter.update('update')
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 'u': 1, 'p': 1, 'd': 1, 'a': 1, 't': 1, 'e': 1})
复制代码
dict_counter.update('update')
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 'u': 2, 'p': 2, 'd': 2, 'a': 2, 't': 2, 'e': 2})
复制代码

\

4 substract方法

和update方法作用相反,update是做加法操作,而substract是做减法操作

dict1 = {"1": 3, "3": 2, "17": 2}
dict_counter = Counter(dict1)
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2})
复制代码

4.1 字典情形

dict_counter.subtract({'key':456})
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 'key': -456})
复制代码
dict_counter.subtract({'key':456})
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 'key': -912})
复制代码

4.2 列表情形

dict_counter.subtract([123])
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 123: -1})
复制代码
dict_counter.subtract([123])
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 123: -2})
复制代码

4.3 字符串情形

dict_counter.subtract('update')
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 'u': -1, 'p': -1, 'd': -1, 'a': -1, 't': -1, 'e': -1})
复制代码
dict_counter.subtract('update')
print(dict_counter)
复制代码

result:

Counter({'1': 3, '3': 2, '17': 2, 'u': -2, 'p': -2, 'd': -2, 'a': -2, 't': -2, 'e': -2})
复制代码

5 items方法

同字典的items方法一致

dict1 = {"1": 3, "3": 2, "17": 2}
dict_counter = Counter(dict1)
print(dict1.items())
print(dict_counter.items())
复制代码

result:

dict_items([('1', 3), ('3', 2), ('17', 2)])
dict_items([('1', 3), ('3', 2), ('17', 2)])
复制代码

6.keys方法

同字典的keys方法一致

dict1 = {"1": 3, "3": 2, "17": 2}
dict_counter = Counter(dict1)
print(dict1.keys())
print(dict_counter.keys())
复制代码

result:

dict_keys(['1', '3', '17'])
dict_keys(['1', '3', '17'])
复制代码

7.values方法

同字典的values方法一致

dict1 = {"1": 3, "3": 2, "17": 2}
dict_counter = Counter(dict1)
print(dict1.values())
print(dict_counter.values())
复制代码

result:

dict_values([3, 2, 2])
dict_values([3, 2, 2])
复制代码

猜你喜欢

转载自juejin.im/post/7016881986937552926