1:dict
dict其实就是对应c语言的map
看下面的格式
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
注意d=后面是大括号
也可以像c语言的map一样通过数组下标赋值
>>> d['Adam'] = 67
>>> d['Adam']
67
和c语言类似,由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
在访问下标中,c语言如果访问下标原先不存在那么c语言会自己建一个相对应的值,赋值为0,但是如果是py就会报错
也就是说不能直接访问没有key不存在的值
>>> d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Thomas'
要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
>>> 'Thomas' in d
False
二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
注意:返回None的时候Python的交互环境不显示结果。
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:(类似于c语言map的earse)
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
注意:不能直接上来就定义d[‘a’]=1,要先d={},然后再d[‘a’]=1这样就行了
set
这个set和cpp的set有点类似,但是定义的时候要创建一个set,需要提供一个list作为输入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
如果下面这么写就会报错
s=set(1,2,3)
和cpp的set一样他不能包含相同的元素,重复元素在set中自动被过滤:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:(有点像cpp的insert)
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
通过remove(key)方法可以删除元素:(有点像cpp的erase)
>>> s.remove(4)
>>> s
{1, 2, 3}
py的set还有一个神奇的操作,居然可以用&和|操作(太智能了
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}