python collection Chainmap Counter
chainmap是一个方便的工具类。它是使用链的方式将多个dict链在一起, 并不是真正的生成一个新的dict,从而允许程序可以这获取任意一个dict 所包含的所有key对应的value。 但是由于式链在一起的, 所以多个dict之间是有优先级区分的。而dict自带的update方式是将两个dict合并成一个。
from collections import ChainMap
#chainmap是允许有多个相同的key 存在, 但是会优先找第一个。 dict1 = {'name':"shun", "age": 10} dict2 = {"name":"shun2", "age":11} dict3 = {"color":"read", "school":"shu"} newChainMap1 = ChainMap(dict1,dict2,dict3) print(newChainMap1['name'],newChainMap1['school'])#shun,shu
#dict2 排在dict1的前面, 所有找key“name”对应的value的时候, 会优先找到dict2的shun2 newChainMap2 = ChainMap(dict2,dict1,dict3) print(newChainMap2['name'],newChainMap2['school']) #shun2,shu
from collections import Counter #Counter可以自动统计容器中各个元素出现的次数 #Counter的本质就是一个dict,他的key是元素,value是这个元素出现的次数 # Counter 对应继承了dictd类, 因此Counter方法包含所有的dict 方法 #通过可迭代对象string 创建counter 对象 counter1 = Counter("shunhh") #通过可迭代对象dict创建counter对象 counter2 = Counter({"name":4,"age":10,"school":'shu'})#字典对象创建的counter对象,内容还是字典本身 #通过可迭代对象list 创建counter 对象 counter3 = Counter(['shun','shun','hhah','shhik']) print(counter1) print(counter2) print(counter3) """ Counter({'h': 3, 's': 1, 'u': 1, 'n': 1}) Counter({'name': 4, 'age': 10, 'school': 'shu'}) Counter({'shun': 2, 'hhah': 1, 'shhik': 1}) """
from collections import Counter #Counter可以自动统计容器中各个元素出现的次数 #Counter的本质就是一个dict,他的key是元素,value是这个元素出现的次数 # Counter 对应继承了dictd类, 因此Counter方法包含所有的dict 方法 #通过可迭代对象string 创建counter 对象 counter1 = Counter("shunhh") #通过可迭代对象dict创建counter对象 counter2 = Counter({"name":4,"age":10,"school":'shu'})#字典对象创建的counter对象,内容还是字典本身 #通过可迭代对象list 创建counter 对象 counter3 = Counter(['shun','shun','shun','hhah','shhik',123,123,123,123,'a','a','b','b2']) #most_common(n)返回counter中出现次数最多的n个元素 #返回counter中出现次数最多的2个元素 print(counter3.most_common(2))#[(123, 4), ('shun', 3)] #返回counter中出现次数最多的3个元素 print(counter3.most_common(3))#[(123, 4), ('shun', 3), ('a', 2)]
from collections import Counter #Counter可以自动统计容器中各个元素出现的次数 #Counter的本质就是一个dict,他的key是元素,value是这个元素出现的次数 # Counter 对应继承了dictd类, 因此Counter方法包含所有的dict 方法 #通过可迭代对象string 创建counter 对象 counter1 = Counter("shunhh") #通过可迭代对象dict创建counter对象 counter2 = Counter({"name":4,"age":10,"school":'shu'})#字典对象创建的counter对象,内容还是字典本身 #通过可迭代对象list 创建counter 对象 counter3 = Counter(['shun','shun','shun','hhah','shhik',123,123,123,123,'a','a','b','b2']) # elements()返回counter 里面所有元素组成的迭代器 print(counter3)#Counter({123: 4, 'shun': 3, 'a': 2, 'hhah': 1, 'shhik': 1, 'b': 1, 'b2': 1}) print(list(counter3.elements())) # ['shun', 'shun', 'shun', 'hhah', 'shhik', 123, 123, 123, 123, 'a', 'a', 'b', 'b2']
from collections import Counter #subtract()计算减法, 计算减去之后各元素出现的次数 cnt1 = Counter(a=4,b=5,c=6) cnt2 = Counter(a=3,b=4) cnt1.subtract(cnt2) print(cnt1) #Counter({'c': 6, 'a': 1, 'b': 1}) cnt1 = Counter(a=4,b=5,c=6) cnt1.subtract(["a","a"]) print(cnt1) #Counter({'c': 6, 'b': 5, 'a': 2}) cnt1 = Counter(a=4,b=5,c=6) cnt1.subtract(["a","a","d"]) print(cnt1) #Counter({'c': 6, 'b': 5, 'a': 2, 'd': -1})
from collections import Counter #对两个counter对象计算加法 cnt1 = Counter(a=4,b=5,c=6) cnt2 = Counter(a=3,b=4) cnt = cnt1 + cnt2 print(cnt)
from collections import Counter #counter对象与dict , list , set之间进行转换 cnt1 = Counter(python=4,java=5) cnt2 = Counter(python=3,java=6) #counter转换成dict dict1 = dict(cnt1) print(dict1) #{'python': 4, 'java': 5} #counter转换成list list1 = list(cnt1) print(list1) #['python', 'java'] 这种方式只包含了key print(list(cnt1.elements())) #['python', 'python', 'python', 'python', 'java', 'java', 'java', 'java', 'java'] 这种方式可以获取全部的元素 #counter转换成set set1 = set(cnt1) print(set1) #{'java', 'python'} #counter转换成tuple tuple1 = tuple(cnt1) print(tuple1) #('python', 'java')
from collections import Counter #对counter进行运算 cnt1 = Counter(python=4,java=5) cnt2 = Counter(python=3,java=6, perl=5) print("cnt1 + cnt2") print(cnt1 + cnt2) #Counter({'java': 11, 'python': 7, 'perl': 5}) print("cnt1 - cnt2") print(cnt1 - cnt2) # Counter({'python': 1}) print("cnt2 - cnt1") print(cnt2 - cnt1) # Counter({'perl': 5, 'java': 1}) print("cnt1 & cnt2") print(cnt1 & cnt2) # Counter({'java': 5, 'python': 3}) #交集 print("cnt1 | cnt2") print(cnt1 | cnt2) # Counter({'java': 6, 'perl': 5, 'python': 4}) 并集 print("+cnt1") cnt1 = Counter(python=3,java=-6, perl=-2) print(+cnt1) # Counter({'python': 3}) 求正, 只保留counter对象中出现次数为0或正数的key-value对 print("-cnt2") cnt2 = Counter(python=3,java=6, perl=-2) print(-cnt2) # Counter({'perl': 2}) 求负, 只保留counter对象中出现次数为负数的key-value对, 并将出现次数改为正数