[19/09/19-星期四] Python中的字典和集合
一、字典
# 字典
# 使用 {} 来创建字典
d = {} # 创建了一个空字典 # 创建一个保护有数据的字典
# 语法:
# {key:value,key:value,key:value}
# 字典的值可以是任意对象
# 字典的键可以是任意的不可变对象(int、str、bool、tuple ...),但是一般我们都会使用str
# 字典的键是不能重复的,如果出现重复的后边的会替换到前边的
# d = {'name':'孙悟空' , 'age':18 , 'gender':'男' , 'name':'sunwukong'}
d = {
'name':'孙悟空' ,
'age':18 ,
'gender':'男' ,
'name':'sunwukong'
} # print(d , type(d)) # 需要根据键来获取值
# print(d['name'],d['age'],d['gender']) # 如果使用了字典中不存在的键,会报错
# print(d['hello']) KeyError: 'hello'
二、字典的使用
# - 字典属于一种新的数据结构,称为映射(mapping)
# - 字典的作用和列表类似,都是用来存储对象的容器
# - 列表存储数据的性能很好,但是查询数据的性能的很差
# - 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素
# - 在字典中可以保存多个对象,每个对象都会有一个唯一的名字
# 这个唯一的名字,我们称其为键(key),通过key可以快速的查询value
# 这个对象,我们称其为值(value)
# 所以字典,我们也称为叫做键值对(key-value)结构
# 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item) # 创建字典
# 使用{}
# 语法:{k1:v1,k2:v2,k3:v3} # 使用 dict()函数来创建字典
# 每一个参数都是一个键值对,参数名就是键,参数名就是值(这种方式创建的字典,key都是字符串)
d = dict(name='孙悟空',age=18,gender='男') # 也可以将一个包含有双值子序列的序列转换为字典
# 双值序列,序列中(利用索引来找值)只有两个值,可变序列列表[1,2] 不可变序列:元组('a',3) 字符串'ab'
# 子序列,如果序列中的元素也是序列,那么我们就称这个元素为子序列
# [(1,2),(3,5)] 符合双值子序列,如列表中嵌套元组的[('name','孙悟饭'),('age',18)] 可以转换成字典{‘name’:'孙悟饭','age':18}
d = dict([('name','孙悟饭'),('age',18)])
# print(d , type(d))
d = dict(name='孙悟空',age=18,gender='男') # len() 获取字典中键值对的个数
# print(len(d)) # in 检查字典中是否包含指定的键
# not in 检查字典中是否不包含指定的键
# print('hello' in d) # 获取字典中的值,根据键来获取值
# 语法:d[key]
# print(d['age']) # n = 'name'
# print(d[n]) # 通过[]来获取值时,如果键不存在,会抛出异常 KeyError
# get(key[, default]) 该方法用来根据键来获取字典中的值
# 如果获取的键在字典中不存在,会返回None
# 也可以指定一个默认值,来作为第二个参数,这样获取不到值时将会返回默认值
# print(d.get('name'))
# print(d.get('hello','默认值')) # 修改字典
# d[key] = value 如果key存在则覆盖,不存在则添加
d['name'] = 'sunwukong' # 修改字典的key-value
d['address'] = '花果山' # 向字典中添加key-value # print(d)
# 增 setdefault(key[, default]) 可以用来向字典中添加key-value
# 如果key已经存在于字典中,则返回key的值,不会对字典做任何操作
# 如果key不存在,则向字典中添加这个key,并设置value
result = d.setdefault('name','猪八戒') #不会把name改成猪八戒 因为name已经存在。
result = d.setdefault('hello','猪八戒') # print('result =',result)
# print(d) # 改 update([other])
# 将其他的字典中的key-value添加到当前字典中
# 如果有重复的key,则后边的会替换到当前的
d = {'a':1,'b':2,'c':3}
d2 = {'d':4,'e':5,'f':6, 'a':7}
d.update(d2) # print(d)
# 删 删除,可以使用 del 来删除字典中的 key-value
del d['a']
del d['b'] # popitem()
# 随机删除字典中的一个键值对,一般都会删除最后一个键值对
# 删除之后,它会将删除的key-value作为返回值返回
# 返回的是一个元组,元组中有两个元素,第一个元素是删除的key,第二个是删除的value
# 当使用popitem()删除一个空字典时,会抛出异常 KeyError: 'popitem(): dictionary is empty'
# d.popitem()
# result = d.popitem() # pop(key[, default])
# 根据key删除字典中的key-value
# 会将被删除的value返回!
# 如果删除不存在的key,会抛出异常
# 如果指定了默认值,再删除不存在的key时,不会报错,而是直接返回默认值
result = d.pop('d')
result = d.pop('z','这是默认值') # del d['z'] z不存在,报错
# result = d.popitem()
# result = d.popitem()
# result = d.popitem()
# result = d.popitem() # clear()用来清空字典
d.clear() # print('result =',result)
# print(d) # copy()
# 该方法用于对字典进行浅复制
# 复制以后的对象,和原对象是独立,修改一个不会影响另一个
# 注意,浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制,直接把地址给引用过来
d = {'a':1,'b':2,'c':3}
d2 = d.copy()
# d['a'] = 100 d = {'a':{'name':'孙悟空','age':18},'b':2,'c':3}
d2 = d.copy()
d2['a']['name'] = '猪八戒' print('d = ',d , id(d))#输出结果d ={'a': {'name': '猪八戒', 'age': 18}, 'b': 2, 'c': 3} 35065144
print('d2 = ',d2 , id(d2))#d2 ={'a': {'name': '猪八戒', 'age': 18}, 'b': 2, 'c': 3} 41238248
三、遍历字典
# 遍历字典
# keys() 该方法会返回字典的所有的key 输出dict_keys(['name','age','gender'])
# 该方法会返回一个序列,序列中保存有字典的所有的键
d = {'name':'孙悟空','age':18,'gender':'男'} # 通过遍历keys()来获取所有的键 遍历一个列表,列表中有几个key就循环几次,以此取出。k是自己命名的变量 输出name 孙悟空 、age 18 、 gender 18
# for k in d.keys() :
# print(k , d[k]) # values()
# 该方法会返回一个序列(中的列表),序列中保存有字典所有的值
# for v in d.values():
# print(v) # items()
# 该方法会返回字典中所有的项
# 它会返回一个序列(中的列表),序列中包含有双值子序列,具体就是列表中包含3个双值元组。序列或字典各个元素(或各个一项)中间由逗号隔开。字典中的每一项中key-value加冒号
# 双值分别是,字典中的key和value。for循环每执行一次就会将序列(这里就是指列表)中一个元素赋值一个变量如temp,如('name','孙悟空')就是一个单独的一个序列(中的列表)元素,一个temp
#而('name','孙悟空')是个元组,元组的解包就是将元组中的每一个变量赋值给一个变量,就是这里的k,v。2步合成1步。
# print(d.items()) 输出dict_item([('name','孙悟空'),('age',18),('gender','男')])
for k,v in d.items() :
print(k , '=' , v)
四、集合
# ## 集合(set)
# - 集合和列表非常相似,但不能使用索引来操作
# - 不同点:
# 1.集合中只能存储不可变对象,如字符串、元组。不能存列表和字典等可变对象
# 2.集合中存储的对象是无序(实际上不是按照元素的插入顺序保存),列表中是有序的
# 3.集合中不能出现重复的元素 # 集合
# 使用 {} 来创建集合
s = {10,3,5,1,2,1,2,3,1,1,1,1} # <class 'set'>
# s = {[1,2,3],[4,6,7]} TypeError: unhashable type: 'list'
# 使用 set() 函数来创建集合
s = set() # 空集合
# 可以通过set()来将序列和字典转换为集合.输出是无序的,因为它存储就是无序的。比如'hell0' 可能是{'o','l','e','h'},不是hello,它顺带把l重复的给去掉了
s = set([1,2,3,4,5,1,1,2,3,4,5])
s = set('hello')
s = set({'a':1,'b':2,'c':3}) # 使用set()将字典转换为集合时,只会包含字典中的键 # 创建集合
s = {'a' , 'b' , 1 , 2 , 3 , 1} # 使用in和not in来检查集合中的元素
# print('c' in s) # 使用len()来获取集合中元素的数量
# print(len(s)) # add() 向集合中添加元素
s.add(10)
s.add(30) # update() 将一个集合中的元素添加到当前集合中
# update()可以传递序列或字典作为参数,字典只会使用键
s2 = set('hello')
s.update(s2)
s.update((10,20,30,40,50))
s.update({10:'ab',20:'bc',100:'cd',1000:'ef'}) # {1, 2, 3, 100, 40, 'o', 10, 1000, 'a', 'h', 'b', 'l', 20, 50, 'e', 30}
# pop()随机删除并返回一个集合中的元素
# result = s.pop() # remove()删除集合中的指定元素
s.remove(100)
s.remove(1000) # clear()清空集合
s.clear() # copy()对集合进行浅复制 # print(result)
print(s , type(s))
五、集合的运算
# 在对集合做运算时,不会影响原来的集合,而是返回一个运算结果
# 创建两个集合
s = {1,2,3,4,5}
s2 = {3,4,5,6,7} # & 交集运算
result = s & s2 # {3, 4, 5} # | 并集运算
result = s | s2 # {1,2,3,4,5,6,7} # - 差集
result = s - s2 # {1, 2} # ^ 异或集 获取只在一个集合中出现的元素
result = s ^ s2 # {1, 2, 6, 7} # <= 检查一个集合是否是另一个集合的子集
# 如果a集合中的元素全部都在b集合中出现,那么a集合就是b集合的子集,b集合是a集合超集
a = {1,2,3}
b = {1,2,3,4,5} result = a <= b # True
result = {1,2,3} <= {1,2,3} # True
result = {1,2,3,4,5} <= {1,2,3} # False # < 检查一个集合是否是另一个集合的真子集 把=那种情况去掉
# 如果超集b中含有子集a中所有元素,并且b中还有a中没有的元素,则b就是a的真超集,a是b的真子集
result = {1,2,3} < {1,2,3} # False
result = {1,2,3} < {1,2,3,4,5} # True # >= 检查一个集合是否是另一个的超集
# > 检查一个集合是否是另一个的真超集
print('result =',result)
[19/09/19-星期四] Python中的字典和集合的更多相关文章
- Python中的字典与集合
今天我们来讲一讲python中的字典与集合 Dictionary:字典 Set:集合 字典的语法: Dictionary字典(键值对) 语法: dictionary = {key:value,key: ...
- python中的字典 和 集合
python中字典是一种key-value的数据类型 字典的特性: 1.无序的 2.key必须的唯一的,so,字典天生去重 语法: 增加 修改 删除 查找 多级字典嵌套及操作 字典的其他用法 #set ...
- Python中的字典和集合
一.字典(dict) 1. 概述 字典是Python唯一的映射类型. 只能使用不可变的对象(比如字符串)来作为字典的键,但是可以把不可变或可变的对象作为字典的值. 键值对在 ...
- 如何将xml转为python中的字典
如何将xml转为python中的字典 import cElementTree as ElementTree class XmlListConfig(list): def __init__(self, ...
- Python数据类型(字典和集合)
1.5 Dictionary(字典) 在Python中,字典用放在花括号{}中一系列键-值对表示.键和值之间用冒号分隔,键-值对之间用逗号分隔. 在字典中,你想存储多少个键-值对都可以.每个键都与一个 ...
- C#在foreach循环中修改字典等集合出错的处理
C#在foreach循环中修改字典等集合出错:System.InvalidOperationException: Collection was modified; enumeration operat ...
- [python语法]python中如何判断一个集合是另一个集合的子集?
问:python中如何判断一个集合是另一个集合的子集? 答:用issubset()方法 语法: A.issubset(B) 返回: True 如果A是B的子集. False 如果A不是B的子集. 样例 ...
- [19/10/13-星期日] Python中的函数
一.函数 # 第五章 函数 ## 函数简介(function) - 函数也是一个对象 - 对象是内存中专门用来存储数据的一块区域 - 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行 ...
- [19/09/08-星期日] Python的几个概念和语法
一.表达式.语句.程序.函数 1.表达式 就是一个类似于数学公式的东西 ,比如:10 + 5 8 - 4:表达式一般仅仅用了计算一些结果,不会对程序产生实质性的影响 如果在交互模式中输入一个表达式,解 ...
随机推荐
- spring 定时器时间配置
Spring--quartz中cronExpression The '*' character is used to specify all values. For example, "*& ...
- Docker(四):Docker常用命令
除过以上我们使用的Docker命令外,Docker还有一些其它常用的命令 拉取docker镜像 docker pull image_name 查看宿主机上的镜像,Docker镜像保存在/var/lib ...
- java总结1
栈,堆,方法区.main和局部变量在栈,new 对象 在堆, 类和常量在方法区除了8大基础数据类型,其他都为引用变量局部变量在函数内或方法上声明,没有默认值,定义必须赋值一旦提供构造方法,就不会有默认 ...
- androi自定义自动换行的View(类似网页的标签Tag)
看来只有礼拜天才有时间写点博客啊,平时只能埋头苦干了.今天在公司加班,遇到一个需求,就是自动换行的TextView,有点像网页的tag标签,点击一下,就自动加上去了,不过这个是根据后台拿来的数据来显示 ...
- BZOJ 4417 Luogu P3990 [SHOI2013]超级跳马 (DP、矩阵乘法)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4417 (luogu)https://www.luogu.org/prob ...
- Spring Boot教程(八)创建含有多module的springboot工程
创建根工程 创建一个maven 工程,其pom文件为: <?xml version="1.0" encoding="UTF-8"?> <pro ...
- 接口自动化request库入门
requests库7个主要方法 r= requsts.get(),主要属性: r.raise_for_status()方法内部判断r.status_code是否等于200不需要增加额外的if语句,该语 ...
- [BZOJ1902]:[NOIP2004]虫食算(搜索)
题目传送门 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母. 来看一个简单的例子: 43#98650#45+8468#6633=444455069 ...
- join的源码
long base = System.currentTimeMills(); long now = 0; if(millis < 0){ throw new IllegalArgumentE ...
- 案例ORA-00600: internal error code, arguments: [qkaffsindex3], [], [], [], []
执行更新统计信息语句: exec dbms_stats.gather_schema_stats(ownname=>'LIVE_KS',degree=>2,cascade=>true, ...