python中的集合dict&set

  1. dict类型

我们已经知道,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入门 慕课网

你可能感兴趣的:(Python基础)