字典dict :
dict和set的key都是不可变对象
对于不变对象来说,调用对象自身的任意方法,也不会改变对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
一、 创建字典的格式:
字典名d = {key1:value1, key2:value2, key3:value3}
说明:a. 整个字典在花括号{ }中,key和value之间用冒号(:)分割,每对之间用逗号(,)分割.
b. 字典名d可以自定义。
字典的特点:
(1)键key必须是唯一的,但值value允许重复。
(2)键key必须是不可变的,如字符串、数字或元组tuple,而值可以取任何数据类型。最常用的key是字符串。
键key不能是列表List,如下使用list的结果会报错:
二、 访问字典里的值,格式:
a. 字典名['key'] 或 字典名[“key”] 注:单引号,双引号均可
b. 如果使用字典里没有的键key访问数据,会输出如下错误:
判断key是否存在的两种方法:
(1)in 方法
‘Thomas’ in d #返回 false,说明字典中的key值中不存在Thomas这个key
(2)get( ) 方法
如果key 不存在,系统默认返回none,或者自己指定不存在时返回的value
d.get('Thomas', -1) #如果不存在就会返回-1,
三、修改字典
增加新的键/值对,修改已有的键对应的值
创建字典: d={'michael':98, 'jane':79, 'kang':60}
增加: 字典名[新的key]=值 eg. d['lily']=78
修改: 字典名[已有的Key]=新值 eg. d['kang']=84
删除:(1) d.pop(key) (2)del d[key] (3)del d (4)d.clear()
删除的四种方式的区别:
(1)和(2)的效果一样,只是删除单个key. 对应的value也会从dict中删除
(3)是完全删除字典及其定义,再使用print(d)时会报错.
(4)只删除字典里的元素,使用print(d)时仍会出现字典的结构,但没有字典元素。
print("创建字典d")
d={'michael':98,'jane':79,'kang':60}
print("创建时字典:",d)
print("jane的分数:",d['jane'])
print("kang的分数为:",d['kang']) print("修改键为kang对应的值:")
d['kang']=83
print("修改后的字典:",d) print("删除kang这个键:")
d.pop('kang')
print("删除某个键之后的字典:",d) print("另一种方式删除key")
del d['jane']
print("另一种方式删除key后的结果:",d) print('添加 lily这个键:')
d['lily']=76
print("添加某个键之后的字典:",d) print("判断某个键是否在字典中的两种方式,key in d 和 d.get(key)")
print("第一种判断key是否在字典中:",'lily' in d)
print("第二种判断key是否在字典中:",d.get('wen')) d.clear()
print("使用字典的clear方法后查看字典结果为:",d) print("下面是使用字典的del方法后查看字典的结果为:发现是报错")
del d
print(d)
下图是上图中代码的执行结果:
注意: dict内部存放的顺序和key放入的顺序是没有关系的。
和list相比,dict的特点:
1,查找和插入的速度极快,不会随着key的增加而变慢
2,需要占用大量的内存,内存浪费多
list的特点:
1,查找和插入的时间随着元素的增加而增加
2,占用空间小,浪费内存很少
综上,dict是用空间来换取时间的一种方法。
set 部分
1,set和dict类似,也是一组key的集合,但不存储value, 由于key不能重复,所以,在set中,没有重复的key
2,创建set,需要list作为输入集合。 显示的顺序不表示set是有序的
3,重复元素在set中会自动过滤。
4,添加元素: add( key )
5,删除元素:remove(key)
6,set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
s1 = set([1, 1, 2, 2, 3, 3])
print('s1:',s1)
s2 = set([2, 3, 4])
print('s2:',s2)
print('s1,s2的交集:',s1 & s2)
print('s1,s2的并集:',s1 | s2)