Python字典、集合之高山流水
字典dict
字典是由大括号{键:值}组成,字典是无序的,字典的键必须是不可变的数据类型,不能使用列表,集合等可变类型作为键。如下:
dict_1 = {'a':1} # 使用str为键,正确
dict_2 = {1:2} # 使用int为键,正确
dict_3 = {True:3} # 使用bool为键,正确
dict_4 = {('a',1):'a'} # 使用元组为键,正确
dict_5 = {[1,2]:'b'} # 使用list为键,错误
dict_6 = {{'a','b'}:12} # 使用set为键,错误
dict_7 = {{'a':1}:5} # 使用字典为键,错误
字典dict常用方法
setdefault(k[,d]):如果只给出键不给值,将打印键对应的值,如果没有找到键返回Note。如果给了键和值,如果键已存在,则什么都不做,如果没有找到键,则将键和值添加到字典中,如下示例:
dict_1 = {'a':1,'b':2}
# 添加一组键值对
dict_1.setdefault('c',3)
print(f'添加后的字典:{dict_1}') # 添加键如果不指定值,默认是None
dict_1.setdefault('d')
print(f'添加后的字典:{dict_1}') print('-'*40) # 如果键不存在将返回None
print(f'字典中b的值是:{dict_1.setdefault("b")}')
print(f'字典中z的值是:{dict_1.setdefault("z")}') # 打印内容如下
添加后的字典:{'a': 1, 'b': 2, 'c': 3}
添加后的字典:{'a': 1, 'b': 2, 'c': 3, 'd': None}
----------------------------------------
字典中b的值是:2
字典中z的值是:None
fromkeys(iterable, value=None, /):给键添加一样的值,但需要注意,如果值是可变类型如列表,那么所有键将都指向这个列表,所以所有键的值都是一样的。
参数:
iterable:是一个可迭代对象,作为键。
value:键的值,默认是None。
示例:
dict_1 = {}
dict_1 = dict.fromkeys(['b','c','d'],100)
print(f'添加后的字典的键和值是:{dict_1}') print('-'*40) # 当键是一个可变的数据类型列表时
dict_1 = dict.fromkeys(['b','c','d'],[1,2])
print(f'添加后的字典的键和值是:{dict_1}') dict_1['b'].append(10)
print(f'键b添加元素10后字典其它键和值是:{dict_1}')
# 打印内容如下
添加后的字典的键和值是:{'b': 100, 'c': 100, 'd': 100}
----------------------------------------
添加后的字典的键和值是:{'b': [1, 2], 'c': [1, 2], 'd': [1, 2]}
键b添加元素10后字典其它键和值是:{'b': [1, 2, 10], 'c': [1, 2, 10], 'd': [1, 2, 10]}
pop(k[,d]):删除字典中的键值对,返回删除键对应的值。
参数:
k:要删除的键。
d:当键不存在的提示信息。
示例:
dict_1 = {'a':1,'b':2,'c':3,'d':4}
buf = dict_1.pop('a')
print(f'删除键a后的字典是:{dict_1}')
print(f'删除的值是:{buf}') print('-'*40) # 删除不存在的键 1
buf = dict_1.pop('z','字典中没有找到键z')
print(f'删除键a后的字典是:{dict_1}')
print(f'删除的值是:{buf}') print('-'*40) # 删除不存在的键 2,如果只给定pop只给定键不给提示信息则会报错
buf = dict_1.pop('z')
print(f'删除键a后的字典是:{dict_1}')
print(f'删除的值是:{buf}')
# 打印内容如下
删除键a后的字典是:{'b': 2, 'c': 3, 'd': 4}
删除的值是:1
----------------------------------------
删除键a后的字典是:{'b': 2, 'c': 3, 'd': 4}
删除的值是:字典中没有找到键z
----------------------------------------
Traceback (most recent call last):
File "C:\Users\id_iot\Desktop\1.py", line 12, in <module>
buf = dict_1.pop('z')
KeyError: 'z'
pop(键,提示语句)是有返回值的,可以返回被删除的键的值。
popitem():以元组的形式返回被删除的键值对,Python3.6以上版本删除最后一项键值对,其它版本是随机删除一组键值对。
dict_1 = {'a':1,'b':2,'c':3,'d':4}
buf = dict_1.popitem()
print(f'删除后的字典是:{dict_1}')
print(f'删除的值是:{buf}')
# 打印内容如下
删除后的字典是:{'a': 1, 'b': 2, 'c': 3}
删除的值是:('d', 4)
keys():打印字典所有的键。
dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典所有的键:{dict_1.keys()}')
print(f'字典所有的键(列表的形式):{list(dict_1.keys())}')
# 打印内容如下
字典所有的键:dict_keys(['a', 'b', 'c', 'd'])
字典所有的键(列表的形式):['a', 'b', 'c', 'd']
values():打印字典所有的值。
dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典所有的值:{dict_1.values()}')
print(f'字典所有的值(列表的形式):{list(dict_1.values())}')
# 打印内容如下
字典所有的值:dict_values([1, 2, 3, 4])
字典所有的值(列表的形式):[1, 2, 3, 4]
items():打印字典所有的键值对。
dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典的键和值:{dict_1.items()}')
print(f'字典的键和值(列表的形式):{list(dict_1.items())}')
# 打印内如如下
字典的键和值:dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
字典的键和值(列表的形式):[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
get(k[,d]):获取字典键的值。
参数:
k:字典的键。
d:提示信息。
示例:
dict_1 = {'a':1,'b':2,'c':3,'d':4}
print(f'字典键a的值:{dict_1.get("a")}')
print(f'字典键z的值:{dict_1.get("z")}')
print(f'字典键z的值:{dict_1.get("z","没有找到z")}')
# 打印内容如下
字典键a的值:1
字典键z的值:None
字典键z的值:没有找到z
copy():字典的浅拷贝。
dict_1 = {'a':1,'b':2,'c':[1,2,3]}
temp = dict_1.copy()
dict_1['a'] = 10
print(f'更改dict_1键a的值后dict_1:{dict_1}')
print(f'更改dict_1键a的值后temp:{temp}') print('-'*40) dict_1['c'][0] = 10
print(f'更改dict_1键c的值后dict_1:{dict_1}')
print(f'更改dict_1键c的值后temp:{temp}') # 打印内容如下
更改dict_1键a的值后dict_1:{'a': 10, 'b': 2, 'c': [1, 2, 3]}
更改dict_1键a的值后temp:{'a': 1, 'b': 2, 'c': [1, 2, 3]}
----------------------------------------
更改dict_1键c的值后dict_1:{'a': 10, 'b': 2, 'c': [10, 2, 3]}
更改dict_1键c的值后temp:{'a': 1, 'b': 2, 'c': [10, 2, 3]}
update(dic):参数是一个字典,将dic更新到源字典中,如果dic的键在源字典中已存在,则更新源字典的键对应的值。
dict_1 = {'a':1,'b':2,'c':3}
# 向字典中添加{'d':4,'e':5}
dict_1.update({'d':4,'e':5})
print(f'更新后的字典是:{dict_1}') # 更新字典键a,b的值
dict_1.update({'a':10,'b':20})
print(f'更新后的字典是:{dict_1}') # 打印内容如下
更新后的字典是:{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
更新后的字典是:{'a': 10, 'b': 20, 'c': 3, 'd': 4, 'e': 5}
clear():清空字典。
dict_1 = {'a':1,'b':2,'c':3}
dict_1.clear()
print(dict_1)
# 打印内容如下
{}
解构
# 如果=号两边变量的数量和值的数量相等,那么变量的数据类型和值的数据类型相同
a,b,c = 1,2,3
print(a,b,c)
# 如果用一个变量接收用逗号","分隔的多个值时,变量最终的数据类型是tuple元组
d = 1,2,3
print(d)
# 打印内容如下
1 2 3
(1, 2, 3)
总结:如果=号两边变量的数量和值的数量相等,那么变量的数据类型和值的数据类型相同,如果用一个变量接收用逗号","分隔的多个值时,变量最终的数据类型是tuple元组。
通过解构的方式打印字典的键和值。
dict_ = {"电视剧":"水浒传","电影":"黄飞鸿"}
for key_,val_ in dict_.items(): # 通过结构的方式打印键和值
print(key_,val_)
# 打印内容如下
电视剧 水浒传
电影 黄飞鸿
set集合
集合是无序的因此不能循环获取,集合的特性是没有重复数据。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典的,还有set集合的值必须是不可变的如:整型、字符串、元祖不能是列表,字典等可被修改的数据。如下操作:
set_1 = {1,2,3} # 正确
set_2 = set() # 定义一个空列表
set_3 = {"a","b","c"} # 正确
set_4 = {True,False} # 正确
set_5 = {1,2,"a",(1,2,3)} # 正确
set_6 = {1,2,"a",[1,2,3]} # 错误的赋值方式,list是可变的
print(set_3) # 打印内容如下:
TypeError: unhashable type: 'list'
set_7 = {1,2,"a",{"字典":"值"}} # 错误的赋值方式,dict是可变的
print(set_7) # 打印内容如下:
TypeError: unhashable type: 'dict'
set_8 = {1,2,"a",{5,7,9}} # 错误的赋值方式,set是可变的
print(set_3) # 打印内容如下:
TypeError: unhashable type: 'set'
set集合中常用的方法:
add():向集合中添加数据,参数必须是不可改变的,参数类型参考set的赋值。
set_1 = {1,2,3}
set_1.add(4)
print(set_1) # 打印内容如下
{1, 2, 3, 4}
update(可迭代对象):向集合中添加可迭代数据。
set_1 = {1,2,3}
set_1.update('abc')
print(set_1)
set_1.update([4,5,6])
print(set_1)
# 打印内容如下
{1, 2, 3, 'c', 'b', 'a'}
{1, 2, 3, 4, 5, 'c', 6, 'b', 'a'}
del 删除集合。
set_1 = {1,2,3}
del set_1
print(set_1)
# 打印内容如下
Traceback (most recent call last):
File "C:\Users\id_iot\Desktop\1.py", line 3, in <module>
print(set_1)
NameError: name 'set_1' is not defined
pop():随机删除一个元素(测试如果有0,默认先删除0,其它随机)。
set_1 = {5,2,1,0,4}
set_1.pop()
print(f'pop后的set_1的值:{set_1}')
set_2 = {'c','a','b','d'}
set_2.pop()
print(f'pop后的set_2的值:{set_2}') # 打印内容如下
pop后的set_1的值:{1, 2, 4, 5}
pop后的set_2的值:{'b', 'c', 'a'}
remove(元素):根据元素进行删除,如果删除一个没有的元素会报错。
set_1 = {1,2,3}
set_1.remove(1)
print(set_1)
# 删除一个没有的元素
set_1.remove(10) # 打印内容如下
{2, 3}
Traceback (most recent call last):
File "C:\Users\id_iot\Desktop\1.py", line 5, in <module>
set_1.remove(10)
KeyError: 10
copy():集合的浅拷贝。
set_1 = {1,2,3}
temp = set_1.copy()
print(temp) # 打印内容如下
{1, 2, 3}
clear():清空集合。
set_1 = {1,2,3}
set_1.clear()
print(set_1) # 打印内容如下
set()
集合的其它操作
交集:两个集合里面都存在的数据,可以使用&或者使用函数intersection来获取两个集合的交集。
set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 & set_2 # 通过&符号获取set_1和set_2的交集
print(set_3) # 打印内容如下:
{2, 3} # 通过函数intersection()获取交集
set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.intersection(set_2) # 通过函数获取set_1和set_2的交集 print(set_3) # 打印内容如下:
{'a', 'c'}
并集:将两个集合进行合并(集合是去重复的),使用|符号或者使用union()函数。
set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 | set_2 # 使用|符号获取两个集合的并集
print(set_3) # 打印内容如下:
{1, 2, 3, 4, 40, 10} # 通过函数union()获取两个集合的并集
set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.union(set_2) # 使用union()函数获取两个数的并集
print(set_3) # 打印内容如下:
{'b', 'z', 'a', 'c', 'd'}
差集:从第一个集合中减去第一个集合和第二个集合共同存在的元素,使用符号-或者使用函数difference()来实现。
set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 - set_2 # 通过符号-将set_1和set_2共同存在的元素从set_1中删除,如果set_2在前就从set_2中删除
print(set_3) # 打印内容如下:
{1, 4} set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.difference(set_2) # 通过函数difference()实现
print(set_3) # 打印内容如下:
{'d', 'b'}
反交集:将两个集合进行合并,并去除相同的元素,使用符号^或者symmetric_difference。
set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 ^ set_2 # 使用^符号实现
print(set_3) # 打印内容如下:
{1, 4, 40, 10} set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.symmetric_difference(set_2) # 使用函数实现
print(set_3) # 打印内容如下:
{'z', 'b', 'd'}
子集:一个集合是否被另一个集合所包含,如果被另一个集合包含返回True,否则返回False,使用<符号或者issubset()。
set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 < set_2 # 使用<符号实现
print(set_3)
# 打印内容如下:
False set_1 = {"a","b","c","d"}
set_2 = {"z","c","a","b","d","e"}
set_3 = set_1.issubset(set_2) # 使用函数实现
print(set_3) # 打印内容如下:
True
超级:与子集相反,判断一个集合是否包含另一个集合,如果包含另一个集合返回True否则返回False,使用符号>或者issuperset()。
set_1 = {1,2,3,4,10,50,40}
set_2 = {10,2,40,3}
set_3 = set_1 > set_2 # 使用>符号
print(set_3) # 打印内容如下:
True set_1 = {"a","b","c","d"}
set_2 = {"z","c","a","b","d","e"}
set_3 = set_1.issuperset(set_2) # 使用函数实现
print(set_3) # 打印内容如下:
False
frozenset(可迭代对象):返回一个冻结的集合,被冻结的集合不能进行修改,删除,添加等操作,如果不写参数,则返回一个冻结的空的集合,参数是可迭代对象所以可以是列表,字典等
下面是一些简单的事例:
set_1 = {"a","b","c","d"}
dic_1 = {"字典":"值"}
list_1 = [1,2,3] set_2 = frozenset(set_1)
dic_2 = frozenset(dic_1)
list_2 = frozenset(list_1) print(type(set_2),set_2)
print(type(dic_2),dic_2) # 字典只能看键不能看值,很多方法都不能用
print(type(list_2),list_2) # 列表的下标也不能使用,大多数函数不能用 # 打印内容如下:
<class 'frozenset'> frozenset({'b', 'd', 'a', 'c'})
<class 'frozenset'> frozenset({'字典'})
<class 'frozenset'> frozenset({1, 2, 3})
下一篇:编码,解码,小数据池:https://www.cnblogs.com/caesar-id/p/10252202.html
Python字典、集合之高山流水的更多相关文章
- python -- 字典 集合
1.字典 定义:字典是以 key :value 的形式来保存数据,用{} 来表示,存储的是 key : value 查找效率比较高(注:字典存储数据时,用的是hash值 ...
- python --->字典 集合 学习笔记
1.字典--->创建空字典:dict={} broa=["李宁",”耐克“,“阿迪达斯”,“鱼c工作室”] sloga=[“A”,“B”,“C”,“D”] dict={&qu ...
- 3、Python字典集合
2.3字典 字典是键值对的无序可变序列.键值之间用冒号隔开,相邻元素之间用逗号隔开,所有元素放在大括号之间{},键可以是Python中所有不可变的数据,不能用列表.元组.字典作为字典的键,键不可重复, ...
- Python字典和集合
Python字典操作与遍历: 1.http://www.cnblogs.com/rubylouvre/archive/2011/06/19/2084739.html 2.http://5iqiong. ...
- Python学习笔记3-Python元组、数组、字典集合的操作
在Python中数组中的每一项可以是不同的数据类型 元组:只能读不能写的数组 aTuple=(1,'abc','tmc',79.0,False) print aTuple[1:3] print typ ...
- python中列表 元组 字典 集合的区别
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...
- **python中列表 元组 字典 集合
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. 1.列表 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表的特 ...
- Python 字典dict 集合set
字典dict Python内置字典,通过key-value进行存储,字典是无序的,拓展hash names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75 ...
- Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据
Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据 学习目标 1.学会使用 filter 借助 Lambda 表达式过滤列表.集合.元组中的元素: 2.学会使用列表解析 ...
- 如何在列表,字典,集合中,根据条件筛选数据 -- Python数据结构与算法相关问题与解决技巧
实际案例: 1.过滤掉列表 [3,9,-1,10,20,-2..]的负数 2.筛出字典{'LiLei':79,'Jim':88,'Lucy':92...}中值高于90的项 3.筛出集合 {77,89, ...
随机推荐
- Heacher互助平台需求分析
课程属性 作业课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 作业链接 https://edu.cnblogs.co ...
- 如何设置使chrome新标签页中打开链接自动跳转到新标签页?
在新标签打开链接的时候这样点选 Ctrl+左键 或者 鼠标中键 或者 右键链接选择'新标签页中打开链接', 可实现出现新标签页但不自动跳转 但是这个有问题, 即, 新标签只是在背景打开, 操作后并不会 ...
- scala判断数据类型
scala判断一个数据或者对象的类型只需要在该对象后面添加 .getClass.getSimpleName : scala> 222.getClass.getSimpleName res1: S ...
- 【Spark篇】---Spark中广播变量和累加器
一.前述 Spark中因为算子中的真正逻辑是发送到Executor中去运行的,所以当Executor中需要引用外部变量时,需要使用广播变量. 累机器相当于统筹大变量,常用于计数,统计. 二.具体原理 ...
- Hbase篇--HBase中一对多和多对多的表设计
一.前述 今天分享一篇关于HBase的一对多和多对多的案例的分析. 二.具体案例 案例一.多对多 人员-角色 人员有多个角色 角色优先级 角色有多个人员 人员 删除添加角色 角 ...
- Web Api Self-Host
今天有在研究SignalR, 发现SignalR可以使用Self-Host的方式,就突发奇想,Web Api是不是也可以使用Self-Host的方式寄宿在Console Application或者其他 ...
- java 获取日期的几天前,几个月前和几年前
java 获取日期的几天前,几个月前和几年前. package bys.utils; import java.util.Date; /** * Created by toutou on 2015/3/ ...
- 由Nginx的DNS缓存导致的访问404
现象 访问某个URL出现404,而且全站都是404.通过日志查看Nginx的规则也正确,请求被代理到指定位置. 排查 最近针对这个站点没有修改过Nginx配置也没有站点升级.所以应该是其他原因.首先P ...
- RabbitMQ消息队列(十一)-如何实现高可用
在前面讲到了RabbitMQ高可用集群的搭建,但是我们知道只是集群的高可用并不能保证应用在使用消息队列时完全没有问题,例如如果应用连接的RabbitMQ集群突然宕机了,虽然这个集群时可以使用的,但是应 ...
- Docker最全教程——从理论到实战(四)
往期内容链接 https://www.cnblogs.com/codelove/p/10030439.html https://www.cnblogs.com/codelove/p/10036608. ...