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, ...
随机推荐
- Python - Python2与Python3的区别、转换与兼容
区别 Python2.x与Python3.x版本区别:http://www.runoob.com/python/python-2x-3x.html 示例解读Python2和Python3之间的主要差异 ...
- 心路历程(一)-自学java两个月心得
这是我的第一条博文,在敲这些文字的时候我已经是一名大四的"老者".说自己"老者"确实如此,因为以前每当这个时候大一新学妹有上架了,哈哈,每当这个时候我们就想了很 ...
- Qt之二进制兼容
一.回顾 使用qt2年多了,但是还是觉得很陌生,总是会被qt搞的很紧张,有时候当我自信满满的打开帮助文档,搜索某个已知的类时,由于笔误敲错了一个字母而出现了另外一个类,不过奇怪的是还真有这么一个类,哎 ...
- 你以为的MongoDB副本集的高可用是真的高可用了吗?
很久没来更新博客,自感是一个只会搬砖的劳工,总搞些MySQL相关的数据库实在无聊,且时不时遇到些不讲道理的Dev吧,真的是心累至极,有种想回头我也去干开发的冲动,当个需求者有话语权要风得风,要雨得雨多 ...
- 精读《Scheduling in React》
1. 引言 这次介绍的文章是 scheduling-in-react,简单来说就是 React 的调度系统,为了得到更顺滑的用户体验. 毕竟前端做到最后,都是体验优化,前端带给用户的价值核心就在于此. ...
- 初学Java Web(8)——过滤器和监听器
什么是过滤器 过滤器就是 Servlet 的高级特性之一,就是一个具有拦截/过滤功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个实现了 Filter ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能
模块(菜单)的排序是每个系统都必须要有的功能,我们框架模块的排序在业务逻辑中已经体现. WinForm版本可以直接在界面上对模块进行排序以控制模块展示的顺序.Web版本在3.2版本中也新增了直接可以模 ...
- MySQL备份与恢复之percona-xtrabackup实现增量备份及恢复 实例
innobackupex 的使用方法1.完全备份 参数一是完全备份地址 完全备份到/data/mysql/back_up/all_testdb_20140612 目录下innobackupex --u ...
- 【Zabbix】CentOS6.9系统下部署Zabbix-agent
目录 安装Zabbix-agent 1.安装YUM源 2.安装Zabbix agent端 3.配置zabbix_agentd.conf文件 4.启动zabbix agent服务 5.zabbix图形界 ...
- 在Windows 下如何使用 AspNetCore Api 和 consul
一.概念:什么是consul: Consul 是有多个组件组成的一个整体,作用和Eureka,Zookeeper相当,都是用来做服务的发现与治理. Consul的特性: 1. 服务的发现:consul ...