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, ...
随机推荐
- MiniProfiler监控Asp.Net MVC5和EF性能
1. 安装依赖包 在web项目打开nuget包管理器搜索 MiniProfiler.Mvc5和MiniProfiler.EF6安装. 2. 在Global.asax中添加配置代码 protected ...
- 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准
系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...
- CentOS 7 源码编译安装 Nginx
这里安装的是nginx 1.14版本 1.下载源码 #下载 wget http://nginx.org/download/nginx-1.14.0.tar.gz #解压 tar -xzf nginx- ...
- 来了,老弟!__二进制部署kubernetes1.11.7集群
Kubernetes容器集群管理 Kubernetes介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S.K8S是Go ...
- Nginx学习系列一搭建环境
1.Win10下安装vmware14虚拟机软件 官方下载地址 全程next,输入key,激活即可. 2.在虚拟机中安装Linux服务器环境,操作系统为Centos7 继续下一步,安装完成! 3.下载C ...
- 再见了Server对象,拥抱IHostingEnvironment服务对象(.net core)
一.绝对路径 1.获取应用程序运行当前目录Directory.GetCurrentDirectory(). System.IO命名空间中存在Directory类,提供了获取应用程序运行当前目录的静态方 ...
- spring boot MySQL极简封装
摒弃繁琐配置,采用极简方式,源码简单,调用丰富,无污染,易携带,工作量减半,java操作mysql居家旅行升职加薪登上人生巅峰迎娶白富美必备object! 项目地址:https://gitee.com ...
- 【Java资源免费分享,网盘自己拿】
JavaSE: Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java毕向东:链接:https://pan.baidu.com/s/1ggzHk ...
- leetcode — partition-list
/** * Source : https://oj.leetcode.com/problems/partition-list/ * * * Given a linked list and a valu ...
- ubuntu 修改网卡名称 更改设备网卡名称 修改eno16777736为eth0 ubuntu 15.10网卡名称为eno16777736
ubuntu linux 进入root用户,管理员模式 编辑这个文件需要管理员模式 在GRUB_CMD_LINUX后面增加图中所示 看到这个地方了没,有提示信息的,想要改变这个文件,记得运行 upda ...