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. TypeError: __str__ returned non-string (type WebStepInfo)

    错误代码: class CaseStep(models.Model): id = models.AutoField(primary_key=True) casetep = models.Foreign ...

  2. 彻底弄懂Javascript模块导入导出

    笔者开始学习Javascript的时候,对模块不太懂,不知道怎么导入模块,导出模块,就胡乱一通试 比如 import xx from 'test.js' 不起作用,就加个括号 import {xx} ...

  3. 网络流棋盘模型 | P3355 骑士共存问题 P4304 [TJOI2013]攻击装置

    题面(骑士共存问题) 在一个 \(n \times n\) 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的 \(n \times n ...

  4. 在GCP上创建Cloud SQL的三种方式(Console,gcloud,Terraform)

    1 简介 Cloud SQL 是GCP上的关系型数据库,常用的有三种方式来创建: (1) 界面操作 (2) 命令行 gcloud (3) Terraform 在开始之前,可以查看:<初始化一个G ...

  5. 精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)

    前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴 ...

  6. BC7-牛牛的字符矩形

    题目描述 牛牛尝试用键盘读入一个字符,然后在屏幕上显示用这个字符组成的 3*3 的矩形. 输入描述 一行读入一个 char 类型的字符. 输出描述 输出这个字符组成的 3*3 矩形. 示例 1 输入: ...

  7. 性能浪费的日志案例-使用Lambda优化日志案例

    性能浪费的日志案例 注:日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化.一种典型的场景就是对参数进行有条件使用,例如对日志消息进行拼接后,在满足条件的情况下进行打印输出 ...

  8. 集合框架-Collection集合

    集合框架 JAVASE提供了满足各种需求的APl,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用.集合按照其存储结构可以分为两大类,分 ...

  9. vue中 beforeRouteLeave 生命周期函数

    beforeRouteLeave需求描述在使用 element-UI的table 的时候,有这么一个需求.从一个页面切换到另一个页面,再切回来的时候,滚动条的位置不变. 需求:滚动浏览列表页,出现滚动 ...

  10. centos7系统的安装部署过程

    一.进入系统引导界面进行配置 引导项说明: 安装centos7系统(*) 测试光盘镜像并安装系统 排错模式(修复系统 重置系统密码) 补充:centos7系统网卡名称 默认系统的网卡名称 eth0 e ...