字典类型(dict)

以大括号来舍申明{}

1
2
3
4
5
6
7
8
9
10
11
>>> x = {'a':1,'b':2,'c':3}
>>> print(x['a'])
>>> print(x.get('b'))
>>> x['a'] = 5
>>> print(x['a'])
>>> x['z']=9
>>> print(x['z'])
1
2
5
9

类似于Java中的map集合,也是用键值对来申明,访问其中的元素需要的不是索引,而是key值。

注意: 通过 key访问 dictvalue,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError
要避免 KeyError 发生,有两个办法:

  1. 先判断一下 key 是否存在,用 in 操作符:

    1
    2
    if 'a' in d:
    print d['a']

    如果 a 不存在,if语句判断为False,自然不会执行 print d['a'] ,从而避免了错误。

  2. 使用dict本身提供的一个get 方法,在Key不存在的时候,返回None

    1
    2
    3
    4
    >>> print d.get('a')
    1
    >>> print d.get('d')
    None

dict有以下几个特点:

  1. 查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而 list 的查找速度随着元素增加而逐渐下降。
    不过 dict 的查找速度快不是没有代价的,dict 的缺点是占用内存大,还会浪费很多内容,list 正好相反,占用内存小,但是查找速度慢。由于dict是按 key 查找,所以,在一个 dict 中,key 不能重复。

  2. 存储的key-value序对是没有顺序的!这和list不一样

  3. 作为 key 的元素必须不可变Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key

由于dict也是一个集合,所以,遍历dict和遍历list类似,都可以通过 for 循环实现。
直接使用for循环可以遍历 dictkey

1
2
3
4
5
6
7
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> for key in d:
... print key
...
Lisa
Adam
Bart

由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值。

set类型

setJava中的set是一样的,它不仅是无序的,而且他的元素不能包含重复的元素
创建 set 的方式是调用 set() 并传入一个 listlist的元素将作为set的元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> s = set(['A', 'B', 'C', 'C'])
>>> print(s)
set(['A', 'B', 'C'])
```


由于`set`是**无序**的,所以他是没有索引的,如果要访问其中的元素,其实实际上是判断该元素是否存在`set`中


```Python
>>> s = set(['A', 'B', 'C'])
>>> if 'A' in s
True
>>> if 'D' in s
False

set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dictkey类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
最后,**set存储的元素也是没有顺序的**。

set也可以进行遍历,但是因为它是无序的,所以元素的顺序是有可能不同的

1
2
3
4
5
6
7
>>> s = set(['Adam', 'Lisa', 'Bart'])
>>> for name in s:
... print name
...
Lisa
Adam
Bart

set更新是调用自带的add()添加函数和remove()删除函数,添加时如果元素已存在,那么他不会添加进去也不会报错,删除时如果元素不存在的话,他是会报错的

1
2
3
4
>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])

删除set中的元素时,用setremove()方法:

1
2
3
4
>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])

如果删除的元素不存在set中,remove()会报错:

1
2
3
4
5
>>> s = set([1, 2, 3])
>>> s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4

所以用add()可以直接添加,而remove()前需要判断。

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

1
2
3
4
5
6
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}