6.3.2 字典

最后更新于:2022-04-02 00:29:25

### 6.3.2 字典 在一个数据集合中查找信息有很多种方式,前面介绍的序列采用的是通过位置索引来查 找信息的方式。还有一种常用的查找方式是通过数据间的关联来查找信息,例如手机里的通 信录一般都是通过姓名查找对应的电话号码。Python 中的字典类型可用来实现这种通过数 据查找关联数据的功能。 相信读者都用过字典,知道字典是由大量“词条”组成的,每个词条由“单字(词)” 加“释义”组成。字典的用法正是“根据单字(词)查找释义”。Python 提供的字典类型(dict) 与现实中的字典是类似的:Python 字典是由大量的“键值对(key-value pair)”组成的集合, 每一个键值对形如“key:value”,其用法是通过“键”key 来访问相应的“值”value。 字典类型 dict 与集合类型 set 一样属于无序集合体,即字典中的键值对没有特定的排列 顺序,因此不能像序列那样通过位置索引来查找成员数据。 创建字典 字典的字面值是用一对花括号括起的、以逗号分隔的一些键值对,形如: ``` {k1:v1,k2:v2,...,kn:vn} ``` 其中,键值对的“键”可以是任何不可修改类型的数据,如数值、字符串和元组等;而键值 对的“值”则可以是任何类型的数据。不含任何键值对的字典是空字典,表示为{}。例如: ``` >>> d = {'Lucy':1234,'Tom':5678,'Mary':1357} >>> print d {'Mary': 1357, 'Lucy': 1234, 'Tom': 5678} ``` 注意,字典中键值对的显示次序与定义次序不同,这是因为字典是无序集合,字典的显示次序由字典在内部的存储结构决定。 除了字面值之外,还可以利用类型构造器 dict()来创建字典,创建时需要将字典的键值 对信息作为参数传递给 dict()。参数的形式有两种:一种是关键字参数形式(参见 4.2.4), 一种是序列(列表或元组)形式,例如: ``` >>> d1 = dict(name="Lucy",age=8,hobby=("bk","gm")) >>> d1 {'hobby': ('bk', 'gm'), 'age': 8, 'name': 'Lucy'} >>> d2 = dict([[(5,1),'Worker'],[(6,1),'Child'],[(7,1),'CPC']]) >>> d2 {(5, 1): 'Worker', (6, 1): 'Child', (7, 1): 'CPC'} ``` 对字典的操作 字典的主要用途是查找与特定键相关联的值,具体操作形式如下: ``` <字典>[<键>] ``` 其返回值就是字典中与给定的键相关联的值。如果指定的键在字典中不存在,则报错(KeyError)。例如: ``` >>> d1["name"] 'Lucy' >>> d1["age"] 8 >>> d1["hobby"] ('bk', 'gm') >>> d1["gender"] Traceback (most recent call last): File "<pyshell#22>", line 1, in <module> d1["gender"] KeyError: 'gender' ``` 前面创建的字典 d2 是以元组为键的,访问时当然要提供一个元组,且元组括号可省略。 例如: ``` >>> d2[(6,1)] 'Child' >>> d2[7,1] 'CPC' ``` 字典类型的数据是可以修改的。与某个键相关联的值可以通过赋值语句来修改,形如: ``` <字典>[<键>] = <新值> ``` 如果指定的键不存在,则相当于向字典中添加新的键值对。例如: ``` >>> d1["age"] = 9 >>> d1 {'hobby': ('bk', 'gm'), 'age': 9, 'name': 'Lucy'} >>> d1["gender"] = "F" >>> d1 {'hobby': ('bk', 'gm'), 'age': 9, 'name': 'Lucy', 'gender': 'F'} ``` 事实上,创建字典的常用方式就是从空字典开始,利用循环语句以某种方式逐个获得键 值对数据,并利用赋值语句加入字典。 del 命令可以用来删除字典条目,形如: ``` del <字典>[<键>] ``` Python 将字典实现为对象,表 6.8 给出了字典对象的方法。 | 方法 | 含义 | | --- | --- | | <字典>.has_key(<键>) | 若<字典>包含<键>,返回 True;否则返回 False | | <字典>.keys() | 返回所有键构成的列表 | | <字典>.values() | 返回所有值构成的列表 | | <字典>.items() | 返回所有(key,value)元组构成的列表 | | <字典>.clear() | 删除<字典>的所有条目 | 图 6.8 字典对象的方法 下面的会话过程演示了对象方法的用法: ``` >>> d1.keys() ['hobby', 'age', 'name', 'gender'] >>> d1.values() [('bk', 'gm'), 9, 'Lucy', 'F'] >>> d1.items()[0:2] [('hobby', ('bk', 'gm')), ('age', 9)] >>> d1.has_key("gender") True ```
';