字典
字典类型是 Python 中唯一的映射类型。“映射”是数学中的术语,简单理解,它指的是元素之间相互对应的关系,即通过一个元素,可以唯一找到另一个元素。
字典没有索引,它由键(key)和键值(value)组成,key相当于是“索引”,value相当于是索引所对就的内容。其中key可以是数字、字符串或元组,但不能是列表,value均可,且key是唯一的,不能重复,如果重复,只保留最后一个。
Python 中的字典类型相当于 Java 或者 C++ 中的 Map 对象。
Python 字典类型的语法格式如下:
dictName = {'key1':'value1','key2':'value2',...,'keyn':valuen}
创建字典常用方法:
1)dict1 = {"李白":"静夜思","苏轼":"江城子","王之焕":"登鹳雀楼"} #正确
dict1 = {("李白":"静夜思"),("苏轼":"江城子"),("王之焕":"登鹳雀楼")} #错误,此法定义的是个集合
2)dict1 = dict((("李白","静夜思"),("苏轼","江城子"),("王之焕","登鹳雀楼"))) #正确,元组转换为字典
dict1 = dict([("李白","静夜思"),("苏轼","江城子"),("王之焕","登鹳雀楼")]) #正确 列表转换为字典
3) dict1 = dict(李白 = "静夜思",苏轼 = "江城子",王之焕 = "登鹳雀楼") #正确
dict1 = dict("李白" = "静夜思","苏轼" = "江城子","王之焕" = "登鹳雀楼") #错误
4)list1 = ["李白", "苏轼", "王之焕"]
list2 = ["静夜思", "江城子", "登鹳雀楼"]
dict1 = dict(zip(list1, list2)) #适用于两组数列转换为字典,若数列长度不同以短的为准
print(dict1)
打印结果:{'李白': '静夜思', '苏轼': '江城子', '王之焕': '登鹳雀楼'}
4)dict1 = {}
dict1["李白"] = "静夜思"
dict1["苏轼"] = "江城子" #此方法常用来修改键值(或添加字典元素),如果没有该键,就会新增这个键和对应值(列表和元组没有的索引赋值是会报错的,提示超出索引)
5)dict1 = {}
dict1.fromkeys(("李白","苏轼","王之焕"),"古人")
输出: {'李白': '古人', '苏轼': '古人', '王之焕': '古人'} #此方法赋值后,dict1还是为空
字典常用函数:
1)keys()函数
dictName.keys() #可输出字典中的所有键(key)
>>> dict1.keys()
dict_keys(['李白', '苏轼', '王之焕'])
2)values()函数
dictName.values() #可输出字典中的所有键值(value)
>>> dict1.values()
dict_values(['静夜思', '江城子', '登鹳雀楼'])
3)items()函数
dictName.items() #可输出字典中的所有项
>>> dict1.items()
dict_items([('李白', '静夜思'), ('苏轼', '江城子'), ('王之焕', '登鹳雀楼')])
4)get()函数
读取或调用字典中某个键的值,如果直接用dictName[key]调用,key不存在的话会报错,用dictName.get(key,"……"),如果key存在,输出对应value,不存在,则输出“……”,get()的第二个参数可不写,不写的话不存在时输出None
另外可用成员操作符in来判断某个键(key)是否存在字典中,这里注意只能判断key,不能判断value
>>> "李白" in dict1
True
>>> "静夜思" in dict1
False
5) update(dictName2)
dictName1.update(dictName2) #相当于把字典2粘贴到字典1,重复的key对应值替换更新,可用于修改或添加字典元素
6)其它
pop(keyName) #用于获取指定 key 对应的 value,并删除这个键值对。
popitem() #方法用于随机弹出字典中的一个键值对。
(注意,此处的随机其实是假的,它和 list.pop() 方法一样,也是弹出字典中最后一个键值
对。但由于字典存储键值对的顺序是不可知的,因此 popitem() 方法总是弹出底层存储的最后一个键值对。)
copy()
clear()
集合
Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。
从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:
{element1,element2,...,elementn}
同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。
Python 中有两种集合类型,一种是 set 类型的集合,另一种是 frozenset 类型的集合,它们唯一的区别是,set 类型集合可以做添加、删除元素的操作,而 forzenset 类型集合不行。
set:
Python 提供了 2 种创建 set 集合的方法,分别是使用 {} 创建和使用 set() 函数将列
表、元组等类型数据转换为集合。
添加删除元素方法:
1)setname.add(element)
2)setname.remove(element) #如果被删除元素本就不包含在集合中,则此方法会抛出KeyError 错误
集合之间可以进行交集(&)、并集(|)、差集(-)以及对称差集(^)运算。
frozenset:
frozenset()函数:
setName = frozenset() #setName为空的frozenset
setName = frozenset({element1,element2,……,elementn}) #setName为frozenset类型
setName2 = frozenset(setName1) #setName2为frozenset类型,setName1仍为set类型
frozenset 的作用主要有两点:
1)当集合元素不需要改变时,使用frozenset代替set更安全。
2)当某些 API 需要不可变对象时,必须用 frozenset 代替 set。比如 dict 的 key 必须是不可变对象,因此只能用 frozenset;再比如set本身的集合元素必须是不可变的,因此set不能包含 set,set 只能包含 frozenset。