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. JAVA中生成随机数Random VS ThreadLocalRandom性能比较

    前言 大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现. 实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那 ...

  2. Appium工具

    1.安装 (1)jdk安装以及环境配置 a.jdk下载地址:https://www.oracle.com/cn/java/technologies/downloads/ 新建系统环境变量: b.编辑P ...

  3. table表格的合并

    如上图,实现单元格合并功能,不多说,直接上代码 一,添加    :span-method="objectSpanMethod" <el-table :key="ti ...

  4. JavaScript:函数:如何声明和调用函数?

    首先,理解什么是函数? 通俗的说,函数就是用大括号括起来的一组JS语句的集合体,是一个代码块,表达一种行为逻辑. 当我们调用函数的时候,我们就是在执行这一组JS语句. 然后,确定一点,在JS中,函数也 ...

  5. python之路39 前端开始 各种标签

    前端前夕 前端三剑客 HTML 网页的骨架 CSS 网页的样式 JavaScript 网页的动态 1.编写服务端 2.浏览器充当客户端访问服务端 3.浏览器无法正常展示服务端内容(因为服务端得数据没用 ...

  6. API 网关的功能用途及实现方式

    1. API 网关诞生背景 前言 API 经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API 成为企业连接业务的核心载体, 并产生巨大的盈利空间.快速增长的 API 规模 ...

  7. 基础分类算法_KNN算法

    KNN(K-NearestNeighbor)算法 KNN算法是有监督学习中的分类算法. KNN算法很特殊,可以被认为是没有模型的算法,也可以认为其训练数据集就是模型本身. KNN算法的原理 KNN的原 ...

  8. 分布式事务 | 使用 dotnetcore/CAP 的本地消息表模式

    本地消息表模式 本地消息表模式,其作为柔性事务的一种,核心是将一个分布式事务拆分为多个本地事务,事务之间通过事件消息衔接,事件消息和上个事务共用一个本地事务存储到本地消息表,再通过定时任务轮询本地消息 ...

  9. 如何将WebAssembly优化到2MB?

    Blazor WebAssembly加载优化方案 对于Blazor WebAssembly加载方案的优化是针对于WebAssembly首次加载,由于BlazorWebAssembly是在首次加载的时候 ...

  10. mysql 5.7安装教程及密码设置

    1.安装网址 https://dev.mysql.com/downloads/mysql/ 2.点击 Archives 3.切换版本,之前安装过新版本出现过很多问题,为了方便学习,所以选择了5.7这个 ...