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对, 并将出现次数改为正数

python collection Chainmap Counter的更多相关文章

  1. Python collection模块与深浅拷贝

    collection模块是对Python的通用内置容器:字典.列表.元组和集合的扩展,它包含一些专业的容器数据类型: Counter(计数器):dict子类,用于计算可哈希性对象的个数. Ordere ...

  2. python collection 和 heapq 模块使用说明

    一 :集合库collection python 拥有一些内置的数据类型,collections模块提供啦几个额外的数据类型: 1,namedtuple   生成可以使用名字来访问元素内容的tuple子 ...

  3. Python:collections.Counter

    collections是Python内建的一个集合模块,其中提供了许多有用的集合类: namedtuple:只有属性的简易类 deque:双向增删的List ChainMap:多个字典的链接 Coun ...

  4. python collection系列

    collection系列 不常用功能,需要进行模块功能导入: import collection Counter 常用方法测试: #!/usr/local/env python3 ''' Author ...

  5. python collections中Counter类

    Counter是dict的一个子类,因此具有dict的属性与方法.如常用的iteritems, items, get, pop. class Counter(dict): 如果Key不存在,将返回0, ...

  6. python collection模块

    一.模块的认识 定义:模块就是我们把装有特定功能的代码进行归类的结果. 说明:从代码编写的单位来看我们的城西,从小到大:一条代码 -> 语句块 - >代码块(函数.类)-> 模块. ...

  7. python 计数器类Counter的用法

    简单操作: import collections A=['a','b','b','c','d','b','a'] count=collections.Counter(A) print(count) C ...

  8. python collection 中的队列

    认识中的队列 在以前的认知里,队列是先进先出,就是一头进,一头出,Queue.而无意间看到了deque 双向队列. 即从该队列的头或者尾部都能插入和移除元素.而起时间复杂度竟然是一样的!O(1),是不 ...

  9. python开发_re和counter

    python中re和counter的结合,可以实现以下的功能: 1.获取字符串或者文件中的单词组 2.对单词组进行统计 下面是我做的demo 运行效果: ======================= ...

  10. Simple Tips for Collection in Python

    I believe that the following Python code is really not hard to understand. But I think we should use ...

随机推荐

  1. Scrum敏捷开发方法实践

    前言   作者所在的公司在项目开发的过程中采用着当下互联网公司中流行的小步快跑开发策略,特别借鉴了敏捷开发中的迭代递增思想来指导项目的开发.我们经过对相关敏捷开发方法的调查研究,最终采用了Scrum敏 ...

  2. 记一次 .NET 某安全生产信息系统 CPU爆高分析

    一:背景 1.讲故事 今天是的第四天,头终于不巨疼了,写文章已经没什么问题,赶紧爬起来写. 这个月初有位朋友找到我,说他的程序出现了CPU爆高,让我帮忙看下怎么回事,简单分析了下有两点比较有意思. 这 ...

  3. 【机器学习】李宏毅——Explainable ML(可解释性的机器学习)

    在前面的学习之中,我们已经学习了很多的模型,它能够针对特定的任务,接受我们的输入并产生目标的输出.但我们并不满足于此,我们甚至希望机器告诉我们,它是如何得到这个答案的,而这就是可解释的机器学习. Wh ...

  4. [seaborn] seaborn学习笔记8-避免过度绘图Avoid Overplotting

    8 避免过度绘图Avoid Overplotting(代码下载) 过度绘图是散点图及几天常见图表中最常见的问题之一.如下图所示当数据集很大时,散点图的点会重叠,使得图形变得不可读.在这篇文章中,提出了 ...

  5. HelloGitHub 最受欢迎的开源项目 Top10(2022年)

    再见 2022,你好 2023! HelloGitHub 也随着 2023 年的到来,更新到了第 81 期 开始迈向第 7 个年头啦. 在过去的 2022 年,我们一共发布了 12 期月刊.分享了 5 ...

  6. Spark详解(04) - Spark项目开发环境搭建

    类别    [随笔分类]Spark Spark详解(04) - Spark项目开发环境搭建 Spark Shell仅在测试和验证程序时使用的较多,在生产环境中,通常会在IDEA中编制程序,然后打成Ja ...

  7. 在Ubuntu上安装OpenShift并使用

    服务器信息 在阿里云买了个抢占式的服务器,地区为华南广州,系统为Ubuntu 20.04,8核16GB. 安装Docker 命令如下: $ apt-get update -y $ apt-get up ...

  8. [阿里云]Datahub测试使用记录

    由于需要测试阿里云Datahub功能,因此测了一下Datahub的一些功能 DATAHUB: 简介: 阿里云的流式数据(streaming)处理平台 对流式数据的发布(publish)订阅(subsc ...

  9. forEach(遍历) VS map(映射) VS reduce(聚合)---学习笔记

  10. angular8实现前端携带cookie发送给后端+nodejs获取前端发送的cookie

    1.前端测试代码angular8 // 测试代码 testCookie() { const url = 'http://10.11.11.11:3000/test/cookie' const para ...