c++ 字典_再来瞄一眼字典与集合?
编程本是逆天行,你若不拼怎么赢?
字典相关
字典是Python语言中唯一的映射类型。映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系,通常被认为是可变的哈希表。
字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。
字典类型与序列类型的区别:
1.存取和访问数据的方式不同。
2.序列类型只用数字类型的键(从序列的开始按数值顺序索引);
3.映射类型可以用其他对象类型作键(如:数字、字符串、元组,一般用字符串作键),和序列类型的键不同,映射类型的键直接或间接地和存储数据值相关联。
4.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。
5.映射类型用键直接“映射”到值。
字典是Python中最强大的数据类型之一。
每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。
键必须独一无二,但值则不必。
值可以取任何数据类型,但必须是不可变的,如字符串,数或元组
大括号是字典,列表是方括号,圆括号是元组。
字典和列表的区别:
列表是有序的对象集和
字典是无序的对象集和
定义一个存储学生信息的字典:
message_dict = {'name' : 'guodong','age' : '21','sex' : 'M','weight' : '140','height' : '180'}print (message_dict)
对字典的各种操作
1.取值,根据索引(key)取值,取值时,索引用中括号括起来
message_dict = {'name' : 'guodong','age' : '21','sex' : 'M','weight' : '140','height' : '180'}# 取字典中索引为name的值print (message_dict['name'])
2:增加/删除
增加:索引使用中括号括起来
message_dict[‘id’] = ‘05’print (message_dict)
删除:索引使用小括号括起来
message_dict.pop(‘id’)print (message_dict)
3:统计键值对的数量
print (len(message_dict))
4:添加字典里面已经存在的元素,会将以前元素内容修改
message_dict[‘age’] = 22print (message_dict)
5:合并字典,如果与原字典键值索引重复,则会被更新
使用 update() 方法,第二个参数合并第一个参数
sex_dict = {'sex':'man', 'grade':4}# 将message_dict字典与sex_dict字典合并message_dict.update(sex_dict)print(message_dict)
字典的遍历
遍历所有的键-值对
可以使用一个 for 循环来遍历字典
Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
message_dict = {'name' : 'guodong','age' : '21','sex' : 'M','weight' : '140','height' : '180'}for key,value in message_dict.items(): print ("key:" + key) print ("value:" + value)
遍历字典中的所有键
在不需要使用字典中的值时,方法 keys() 很有用。下面来遍历字典favorite_languages ,并将每个被调查者的名字都打印出来:
Python title() 方法返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}for name in favorite_languages.keys(): print(name) # 输出键 print(name.title()) # 单词首字母大写
遍历字典时,会默认遍历所有的键,因此,
如果将上述代码中的 for name in favorite_languages.keys(): 替换为 for name in favorite_languages: ,
输出将不变。
如果显式地使用方法 keys() 可让代码更容易理解,你可以选择这样做,但如果你愿意,也可省略它。
按顺序遍历字典中的所有键
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。
这不是问题,因为通常你想要的只是获取与键相关联的正确的值。
要以特定的顺序返回元素,一种办法是在 for 循环中对返回的键进行排序。
为此,可使用函数 sorted() 来获得按特定顺序排列的键列表的副本
favorite_languages = { 'jen' : 'python', 'sarah' : 'c', 'edward' : 'ruby', 'phil' : 'python'}# 使用sorted函数对字典中的键进行排序for name in sorted(favorite_languages): print (name.title())
遍历字典中的所有值
如果你感兴趣的主要是字典包含的值,可使用方法 values() ,它返回一个值列表,而不包含任何键。
例如,如果我们想获得一个这样的列表,即其中只包含被调查者选择的各种语言,而不包含被调查者的名字,可以这样做:
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}# 使用values方法遍历字典中的所有值for language in favorite_languages.values(): print(language)
这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,
但如果被调查者很多,最终的列表可能包含大量的重复项。
为剔除重复项,可使用集合( set )。集合 类似于列表,但每个元素都必须是独一无二的:
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',}# 使用集合set剔除重复项for language in set(favorite_languages.values()): print(language)
集合相关
set是一个无序且不重复的元素集合。
集合对象是一组无序排列可哈希的值,集合成员可以做字典中的键。集合用in和not in操作符检查成员,以len()內建函数得到集合的基数(大小),用for循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。
set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:
1 不重复
2 元素为不可变对象
方式一
先初始化再赋值
s = set()s = {11,22,33,44} #注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典
方式二
直接创建
a=set('boy')
方式三
利用list创建
b=set(['y', 'b', 'o','o'])# 打印b结果自动去重:{'y', 'o', 'b'}
方式四
利用dict创建,将会使用dict中的key值作为set的值
c=set({"k1":'v1','k2':'v2'})print(c)#{'k1', 'k2'}
方式五
使用tuple创建
e={('k1', 'k2','k2')}print(e,type(e))# {('k1', 'k2', 'k2')} <class 'set'>
更新(增加)update
se = {11, 22, 33}be = {22,44,55}se.update(be) # 把se和be合并,得出的值覆盖seprint(se) #{33, 22, 55, 11, 44}se.update([66, 77]) # 可增加迭代项print(se)# {33, 66, 22, 55, 11, 44, 77}
删除discard()、remove()、pop()
se = {11, 22, 33}se.discard(11)se.discard(44) # 移除不存在的元素不会报错print(se) # {33, 22}se = {11, 22, 33}se.remove(11)se.remove(44) # 移除不存在的元素会报错print(se)se = {11, 22, 33}se.pop() # 删除最后一个元素33print(se) #{11, 22}
集合操作
交集
intersection, intersection_update,也可以使用a&b
se = {11, 22, 33}be = {22,44,55}temp1 = se.intersection(be) #取交集,赋给新值print(temp1) # {22}print(se) # {11, 22, 33}temp2 = se.intersection_update(be) #取交集并更新自己print(temp2) # Noneprint(se) # {22}print(se&be) # {22}
并集
union,也可以使用a|b
se = {11, 22, 33}be = {22,44,55}temp=se.union(be) #取并集,并赋新值print(se) #{33, 11, 22}print(temp) #{33, 22, 55, 11, 44}print(se|be) # {33, 22, 55, 11, 44}
差集difference, difference_update,也可以使用a-b
se = {11, 22, 33}be = {22, 55}temp1 = se.difference(be) #找到se中存在,be中不存在的集合,返回新值print(temp1) #{33, 11}print(se-be) # {33, 11}print(se) #{33, 11, 22}temp2 = se.difference_update(be) #找到se中存在,be中不存在的集合,覆盖掉seprint(temp2) #Noneprint(se) #{33, 11}se = {11, 22, 33} # 移除末尾元素并把移除的元素赋给新值temp = se.pop()print(temp) # 33print(se) # {11, 22}
包含关系
两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:
set.isdisjoint(s):判断两个集合是不是不相交
set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b
set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b
如果要真包含关系,就用符号操作>和<
se = {11, 22, 33}be = {22}print(se.isdisjoint(be)) #False,判断是否不存在交集(有交集False,无交集True)print(se.issubset(be)) #False,判断se是否是be的子集合print(se <= be) # Falseprint(se.issuperset(be)) #True,判断se是否是be的父集合print(se >= be) # True
合并 symmetric_difference, symmetric_difference_update
se = {11, 22, 33}be = {22}temp1 = se.symmetric_difference(be) # 合并不同项,并赋新值print(temp1) #{33, 11}print(se) #{33, 11, 22}temp2 = se.symmetric_difference_update(be) # 合并不同项,并更新自己print(temp2) #Noneprint(se) #{33, 11}
集合的转换
集合可以转换为list,tuple以及str
se = set(range(4))li = list(se)tu = tuple(se)st = str(se)print(li,type(li)) # [0, 1, 2, 3] print(tu,type(tu)) # (0, 1, 2, 3) print(st,type(st)) # {0, 1, 2, 3}
不变集合
Python提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset,使用方法如下
a = frozenset("hello")print(a) # frozenset({'e', 'h', 'l', 'o'}
需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。
c++ 字典_再来瞄一眼字典与集合?相关推荐
- python如何调用字典_如何访问python字典里的值?(实例解析)
今天这篇文章中我们来了解一下python之中的字典,在这文章之中我会对python字典访问进行说明,以及python使用.访问字典的实例分析.好了废话不多说,我们开始进入文章吧. 访问字典里面的值 把 ...
- 遍历字典_十三、Python字典三种遍历方法
Python字典是最基本的数据结构之一,在Python中使用非常频繁,所以对Python字典的遍历非常重要.下面介绍常用的几种字典遍历方法. 根据key遍历 d1 = {'姓名': '风清扬', '年 ...
- mysql弱口令字典_自制弱口令字典top100
在进行密码字典攻击时,经常使用到一些弱口令字典.而这些若口令字典基本都是通过各大网站泄露的密码,统计出使用频率最多的密码作为字典.这样就可以大大提高成功率.相信大家都听说过CSDN top 100,1 ...
- java将xml转化为字典_将XML转换为字典
我需要将XML文件转换成字典(稍后将转换为JSON).在 XML脚本示例如下:<?xml version="1.0" encoding="UTF-8"?& ...
- python将一个字典的内容添加到另一个字典_将两个字典值合并为一个,然后将其添加到Python中的另一个字典中...
我的任务是使部门和部门列表,教授和学科作为参数接收.我需要过滤整个列表并返回该部门的代码,教授和学科,而无需迭代或使用递归.我已经过滤了该部门的输入,但是我不知道如何列出仅由名字和姓作为第一字典级联的 ...
- python统计词频 创建字典_如何利用Python进行文本词频统计
问题描述 Python在自然语言处理这个方面,有其天然的优势:简单,快捷.所以我们经常会遇到利用Python从一篇文档中,统计文本词频的问题.以<三国演义>这部名著为例,文中哪些人物的出场 ...
- python 字典 列表 速度_高效使用Python字典的清单
字典(dict)对象是 Python 最常用的数据结构,社区曾有人开玩笑地说:"Python企图用字典装载整个世界",字典在Python中的重要性不言而喻,这里整理了几个关于高效使 ...
- python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...
[多选题]路由器A的G0/0/1接口配置信息如下,下列说法正确的有?(多选) acl number 3000 rule 5 deny 17 rule 10 deny 89 rule 15 deny 6 ...
- python 追加到字典_扫描器篇(三)之python编写基于字典的网站目录探测脚本
工具原理: 通过读取字典获取内容,拼接url执行get http请求获取 响应状态码,根据状态码判断目录文件资源是否存在 1 2 思路: 工具命令行参数获取 1 字典读取 1 多线程访问 1 状态码获 ...
最新文章
- CUDA运行时 Runtime(一)
- 系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构...
- 单片机驱动DM9000网卡芯片(详细调试过程)【下】
- 张量的通俗理解和计算
- 【ArcGIS Pro微课1000例】0007:ArcGIS Pro 2.5质量检查:拓扑创建与编辑案例教程
- 转:有关常量的知识点
- Voice Lab 7- AAR-SRST-Media Resource
- 安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点
- Git生成SSH共钥
- 一家中国公司把城市变成了AI版《清明上河图》
- 88家上市公司区块链分布图:七成拓展落地应用 互联网公司善于底层基础
- Collecting package metadata (current_repodata.json)解决方法
- 清除COOKIES有什么好处
- (三万字长文)类型即正义:TypeScript 从入门到实践系列,正式完结!
- Beta周王者荣耀交流协会第五次Scrum会议
- 参与评选开源软件名单
- [LQR简要快速入门]+[一级倒立摆的LQR控制]
- React 和 Redux
- 伴随着我娃成长的运维平台(持续开源..)
- RobotCraft 2019第四届机器人技术国际学院Robotics Craftsmanship International Academy(译)