在Python中内置有字典dict,是以键值对的形式存储,在Java中有map,在Objective-C中也称为dict。
>>> gather = {'张三':78,'李四':59,'王五':98}
>>> print(gather['张三'])
78
>>> gather = {'张三':78,'李四':59,'王五':98}
>>> print(gather['张三'])
>>> gather['张三'] = 88
>>> print(gather['张三'])
78
88
如果key值不存在,那么会报错,我们可以用in检查key是否存在存在dict中
>>> '赵六' in gather
>>> '张三' in gather
false
true
还可以使用dict提供的get方法检查key是否存在存在dict中,如果存在就返回key对应的value值,如果没有,可以返回自己指定的值
>>> gather.get('张三')
78
>>> gather.get('赵六','没有')
'没有'
>>> gather = {'张三':78,'李四':59,'王五':98}
>>> print(gather)
{'张三': 78, '李四': 59, '王五': 98}
>>> gather.pop('张三')
78
>>> print(gather)
{'李四': 59, '王五': 98}
教程中提到list和dict一些特点上区别
和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
而list相反:
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
set的特点是有序的、无重复的,set与dict不同,set是没有value的
>>> s = set([1,2,3,4,5,3,5,6,4,7])
>>> s
{1, 2, 3, 4, 5, 6, 7}
>>> s1.add(1)
>>> s1
{1, 2, 3, 4, 5}
>>> s1.remove(1)
>>> s1
{2, 3, 4, 5}
>>> s1 = set([1,2,3,4,5])
>>> s2 = set([4,5,6,7,8])
>>> s1 & s2
{4, 5}
>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8}
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
str是不可变对象,而list是可变对象。
先说list,对list进行操作时,能对list内部的内容作出改变,所以list被称为可变对象,比如:
>>> list = ['c','b','a']
>>> list.sort()
>>> list
['a', 'b', 'c']
>>> list
['a', 'b', 'c']
对list进行排序操作后,list的内容就发生改变。
再说str,它是一个不可变对象:
>>> str = 'nba'
>>> str.replace('a','A')
'nbA'
>>> str
'nba'
对str进行操作后,发现str并未发生改变。
我们可以来解释一下其中的原因:
△ 变量str指向对象’nba’,当对str进行操作时,实际上也是对’nba’进行操作,但实际上并未对str所指向的’nba’进行操作,而是生成了一个新的对象’nbA’,这里我们没有使用变量指向这个’nbA’。
△ 所以str的值,还是’nba’,如果需要这个新对象’nbA’,则需要一个新的变量来接收它:
>>> str = 'nba'
>>> str.replace('a','A')
'nbA'
>>> str
'nba'
>>> str1 = str.replace('a','A')
>>> str
'nba'
>>> str1
'nbA'