您的位置:首页 > 编程语言 > Python开发

Python 1.6 使用dict和set

2015-12-30 11:51 501 查看
dict
Python内置了字典:dict的支持,dict全称dictionary,其他语言中也称为map,是用键-值(key-value)存储,具有极快的查找速度。
用python写一个dict如下:
>>>d = {'Michael': 95, 'Bob': 80, 'Jack': 76}
>>>d['Michael']
95
把数据放入dict的方法除了初始化时指定外,还可以通过key放入:
>>>d['Tom'] =60

>>>d['Tom']

60
>>>d
{'Michael': 95, 'Bob': 80, 'Jack': 76, 'Tom': 60}
key值若为存在的key,则对key新赋的值将覆盖原有的值,如key不存在,则将在dict中新建一组key-value。
读取dict中的数据时,若key不存在,将会报错。

为了避免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中存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有一下几个特点:
1、查找速度快。不会随着key的增加而增加。

2、需要占用的内存多,容易造成内存的浪费。
所以,dict是是用空间换取时间的一种方法。

牢记一条:Dict的key必须是不可变对象。

dict通过key来计算value的存储位置,这种通过key计算位置的方法称为哈希算法(hash)。要保证hash的正确性,作为key的对象就不能变。在python中,字符串、整数等都是不可变的,可以放心作为key。而list是可变的,就不能作为key:

SET
set也是一组key的集合。但不存储value。由于key不能重复,所以在set中,没有重复的key。
若要创建一个set,必须提供一个list作为输入集合:
>>>s = set([1,2,3])

>>>s
{1,2,3}
传入的参数是一个list,而显示的{1,2,3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。
注:重复的元素在set中自动过滤。

>>>s =set([1,1,2,2,2,3,3])

>>>s
{1,2,3}
通过add(key)方法可以把元素添加到set中,可以重复添加,但是无效果。

>>>s.add(5)

>>>s
{1,2,3,5}
通过remove(key)删除key。
set可以看作是数学意义上的无序和无重复元素的集合。因此两个set可以做数学意义上的交集或者并集。
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}
set和dict的唯一区别在于有没有存储value值。

不可变对象
str是不可变对象,list是可变对象。
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如:
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
而对于不可变对象,比如str,对str进行操作呢:
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

小结:
是用key-value存储结构的dict在Python中非常有用,选择不可变对象作为key非常重要。最常用的key是字符串。tuple虽然是不变对象,试试把(1,2,3)和(1,[2,3])放入set或者dict,解释结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  set python dict