Python基础——Dict和Set
字典类型(dict)
以大括号来舍申明{}
1 | 'a':1,'b':2,'c':3} x = { |
类似于Java中的map集合,也是用键值对来申明,访问其中的元素需要的不是索引,而是key值。
注意: 通过 key访问 dict
的value,只要 key 存在,dict
就返回对应的value。如果key不存在,会直接报错:KeyError
。
要避免 KeyError
发生,有两个办法:
先判断一下
key
是否存在,用in
操作符:1
2if 'a' in d:
print d['a']如果 a 不存在,
if
语句判断为False,自然不会执行print d['a']
,从而避免了错误。使用
dict
本身提供的一个get
方法,在Key不存在的时候,返回None
:1
2
3
4print d.get('a')
1
print d.get('d')
None
dict
有以下几个特点:
查找速度快,无论
dict
有10个元素还是10万个元素,查找速度都一样。而list
的查找速度随着元素增加而逐渐下降。
不过dict
的查找速度快不是没有代价的,dict
的缺点是占用内存大,还会浪费很多内容,list
正好相反,占用内存小,但是查找速度慢。由于dict
是按 key 查找,所以,在一个dict
中,key 不能重复。存储的key-value序对是没有顺序的!这和
list
不一样作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是
list
是可变的,就不能作为 key。
由于dict
也是一个集合,所以,遍历dict
和遍历list
类似,都可以通过 for
循环实现。
直接使用for
循环可以遍历 dict
的 key:
1 | 'Adam': 95, 'Lisa': 85, 'Bart': 59 } d = { |
由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值。
set类型
set
跟Java中的set
是一样的,它不仅是无序的,而且他的元素不能包含重复的元素,
创建 set
的方式是调用 set()
并传入一个 list
,list
的元素将作为set
的元素:
1 | set(['A', 'B', 'C', 'C']) s = |
set
的内部结构和dict
很像,唯一区别是不存储value,因此,判断一个元素是否在set
中速度很快。set
存储的元素和dict
的key类似,必须是不变对象,因此,任何可变对象是不能放入set
中的。
最后,**set
存储的元素也是没有顺序的**。
set
也可以进行遍历,但是因为它是无序的,所以元素的顺序是有可能不同的
1 | set(['Adam', 'Lisa', 'Bart']) s = |
set
更新是调用自带的add()
添加函数和remove()
删除函数,添加时如果元素已存在,那么他不会添加进去也不会报错,删除时如果元素不存在的话,他是会报错的
1 | set([1, 2, 3]) s = |
删除set
中的元素时,用set
的remove()
方法:
1 | set([1, 2, 3, 4]) s = |
如果删除的元素不存在set
中,remove()
会报错:
1 | set([1, 2, 3]) s = |
所以用add()
可以直接添加,而remove()
前需要判断。
set
可以看成数学意义上的无序和无重复元素的集合,因此,两个set
可以做数学意义上的交集、并集等操作:
1 | set([1, 2, 3]) s1 = |