Python

Python 知识量:10 - 41 - 150

7.5 字典与集合><

什么是字典- 7.5.1 -

字典是Python的一种利用键-值对组织数据的数据结构。通过字典可以高效的利用键来访问字典值,而且,字典是可变的,允许创建后再添加、删除或修改键-值对。

结构上,字典数据由花括号括起来,每个元素以逗号分隔,元素的结构则由键-值对组成,键与值之间以冒号分隔。

>>> age={'Jeff':35,'Lucy':28,'Bob':44}
>>> age
{'Jeff': 35, 'Lucy': 28, 'Bob': 44}
>>> age['Bob']
44
>>> age['Bob']=33
>>> age
{'Jeff': 35, 'Lucy': 28, 'Bob': 33}

由字典的结构可以看出,字典与Java等编程语言中的关联数组相似,实际上,字典也称为关联数组、映射或散列表。在具体实现中,字典的每个键会被转换为一个散列值,散列值由散列函数自动计算给出,散列值作为实际的索引以实现数值的检索。

键的限制- 7.5.2 -

在使用字典时,对键来说有两条限制:

  • 键必须是独一无二的。

  • 键必须是不可变的。

独一无二意味着,在同一个字典中,任何两个键的名称不能相同,例如:

>>> age={'Jeff':35,'Bob':22,'Lucy':28,'Bob':44}
>>> age
{'Jeff': 35, 'Bob': 44, 'Lucy': 28}

虽然定义了两个名为“Bob”的键,但最终只存储了一对该名称的键-值对,且其值为最后一次定义的值。

键的不可变很好理解,前面提到过键最终由散列值来表示,任何名称的改变都会意味着散列值的改变,也就改变了索引位置,原来的键-值对就无法访问了。

字典函数- 7.5.3 -

Python提供的常用字典函数如下表所示:

函数名功能说明
d.items()返回一个由字典d的键-值对组成的视图。
d.keys()返回一个由字典d的键组成的视图。
d.values()返回一个由字典d的值组成的视图。
d.get(key)返回与key关联的值。
d.pop(key)删除键key并返回与之关联的值。
d.popitem()删除字典d的最后一个键-值对并返回其值。
d.clear()删除字典d的所有元素。
d.copy()复制字典d。
d.fromkeys(s,t)创建新字典,其键来自s,值来自t。
d.setdefault(key,v)如果键key包含在字典d中,返回其值;否则返回v,并将“key:v”添加到字典中。
d.update(e)将e中的键-值对添加到字典d中,e可以是字典,也可以是键-值对序列。

以上函数中,d.get(key)的功能与d[key]一样,用于获取字典中的值,但如果字典中没有找到该键,这两种方法都会引发KeyError异常。因此,在获取字典值时,可以先通过key in d语句检查一下key是否在字典中。

函数pop(key)和popitem()都可以用于删除并获取字典值,区别是pop(key)删除key指定的值,其参数必须给出,而popitem()总是删除最后一个键-值对。

函数items()、keys()和values()都用于返回一个视图,视图是临时构建的,并不实际存在于系统中。视图是字典的映射,就像照片一样,但它是根据需要加工后的照片。当字典发生变化时,视图也随之改变。例如下面的示例:

>>> age={'Jeff':35,'Lucy':28,'Bob':44}
>>> keys=age.keys()
>>> keys
dict_keys(['Jeff', 'Lucy', 'Bob'])
>>> values=age.values()
>>> values
dict_values([35, 28, 44])
>>> items=age.items()
>>> items
dict_items([('Jeff', 35), ('Lucy', 28), ('Bob', 44)])
>>> age.popitem()
('Bob', 44)
>>> keys
dict_keys(['Jeff', 'Lucy'])

集合- 7.5.4 -

集合就是一系列不重复的元素,它类似于字典,但只包含键,没有值。

集合可以分为两类:可变集合和不可变集合。可变集合在集合创建后依然可以添加或删除元素;不可变集合一旦创建就不能改变其元素。可以使用花括号或者函数set()创建集合。

集合常用于删除序列中的重复元素,例如:

>>> number=[1,5,3,6,5,4,5,6,2,3,8,7,7,1,5]
>>> n=set(number)
>>> n
{1, 2, 3, 4, 5, 6, 7, 8}
>>> number=[1,5,885,454,22,14,522,14,5,885,478746]
>>> n=set(number)
>>> n
{1, 5, 454, 522, 14, 885, 22, 478746}

注意:集合元素的排列顺序也是不确定的。