我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字以及他们对应的分数:
['mike','aki','jack']#姓名
[98,86,78]#对应的分数
但是如果要想通过名字找到对应的分数,使用list就不一定方便。
如果利用dict就能方便许多,在dict中名字作为key,分数作为value,dict可以通过key查找对应的value。
d = {
'mike': 98,
'aki': 86,
'jack': 78
}
使用花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
由于d{}是一个集合,可以用len()计算该集合的长度。
len(d)
访问dict
dict可以使用key查找对应的value,形如d[key]。这和list有点区别,list通过索引返回对应的value。
d['aki']
有点时候输入的key可能不在集合中,那么可以先判断集合中是否含有所选择的key。
if 'lee' in d
print d[lee]
另一种方法判断key是否在集合中的命令,d.get()。
print d.get('naren')
如果所输入的key不在其中,那么print结果为None。
dict特点一:查找速度快
dict的查找速度特别快,10个数据和1万个数据的查找速度都一样。相比list,随着数据的增多,list速度回逐渐变慢。
不过,查找速度并不是全部,dict很占用空间,相反list占用空间很小。
list是按照key查找value的,所以在list中key不能重复。
dict特点二:内部具有无序性
也就是说,dict中存储的key-value序对没有排列顺序,因此不能用dict存储有序的序对。
dict特点三:key具有不可变性
python中字符串、整数、浮点数、tuple都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
不过value是可变的,value可以用list。
('a','b'):[1,2,3]
123 : 'a'
更新dict
dict是可变的,也就是说,我们可以随时往dict中添加新的 key-value。比如已有dict:
d = {
'mike': 98,
'aki': 86,
'jack': 78
}
d['blue']=70
如果赋值的key已经存在,那么可以替换相应的value。如:
d['mike']=80
遍历dict
由于dict也是一个集合,所以,遍历dict和遍历list类似,都可以通过 for 循环实现。
可以直接用for循环遍历dict的key。
d = {
'mike': 98,
'aki': 86,
'jack': 78
}
for key in d:
print key
由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值。如:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for key in d:
print key + ':', d[key]
2.
set类型
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set()更适合。
set内含有一系列元素,set中元素无重复、无序且具有不变性,这点和dict中的key很想像。
创建一个set,需要用list作为元素。
s = set(['A', 'B', 'C'])
例:请用set表示班里的4位同学:
Adam, Lisa, Bart, Paul
s = set([Adam, Lisa, Bart, Paul])
访问set
已经学过的list通过索引访问元素,dict通过其中的key访问,访问set一般用来判断某元素是否在set中,而且由于set是无序集合,所以无法用索引,且set中的元素是list,也无法用key。
因此,我们可以用in来判断元素是否在set中。
s = set([Adam, Lisa, Bart, Paul])
'Bill' in s #False
'Adam' in s #True
'adam' in s #False
由上还可得出,set不能识别大小写。
例:假设我们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期呢
weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
x = '???' # 用户输入的字符串
if x in weekdays:
print 'input ok'
else:
print 'input error'
遍历set
由于 set 也是一个集合,所以,遍历 set 和遍历 list 、dict类似,都可以通过 for 循环实现。
例:请用 for 循环遍历如下的set,打印出 name: score 来。
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)])
for x in s:
print x[0]+':',x[1]
更新set
由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除。
添加元素时,用set的add()方法,如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了。
s = set([1,2,3])
s.add(4)
print s
删除set中的元素时,用set的remove()方法,如果删除的元素不存在set中,remove()会报错。
s = set([1,2,3,4])
s.remove(4)
print s
由于remove()用时可能会报错,用remove前需要判断。add可直接使用。
例:针对下面的set,给定一个list,对list中的每一个元素,如果在set中,就将其删除,如果不在set中,就添加进去。
s = set([‘Adam’, ‘Lisa’, ‘Paul’])
L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
s = set(['Adam', 'Lisa', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for name in L:
if name in s:
s.remove(name)
else:
s.add(name)
print s
总结:
dict&set
1.作为python中的集合,有:
dict{
key1 : value1,
key2 : value2,
…
}
set(list)
2.dict中的key与set中的元素都具有的三个特点:
无序性、无重复性和不变性。
3.集合的访问、遍历和更新
dict访问 通过key; set访问,用in做判断
dict set 遍历 通过for循环
dict更新 :添加、替换 ;set更新:添加(add)、删除(remove)
详细参考:python入门 慕课网