需要将一系列值组合成数据结构并通过编号来访问各个值时,列表很有用。当通过名称来访问其各个值的时候,此时的数据结构称为映射(mapping)。字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或元组。
1. 字典的用途
- 下面是Python字典的一些用途:
❑ 表示棋盘的状态,其中每个键都是由坐标组成的元组;
❑ 存储文件修改时间,其中的键为文件名;
❑ 数字电话/地址簿。
2. 创建和使用字典
>>> phonebook={'Alice':'1111', 'beth':'2222', 'Cecil':'3528'}
字典由键及其相应的值组成,这种键-值对称为项(item)。在上面的示例中,键为名字,而值为电话号码。每个键与其值之间都用冒号(:)分隔,项之间用逗号分隔,而整个字典放在花括号内。
2.1 函数dict
使用函数dict[插图]从其他映射(如其他字典)或键-值对序列创建字典。
>>> item = [('name', 'Gumby'), ('age', 42)]
>>> d = dict(item)
>>> d
{'name': 'Gumby', 'age': 42}
还可使用关键字实参来调用这个函数
>>> d = dict(name ='gumb;y', age = 42)
>>> d
{'name': 'gumb;y', 'age': 42}
2.2 字典的基本操作
字典的基本行为在很多方面都类似于序列。
❑ len(d)返回字典d包含的项(键-值对)数。
❑ d[k]返回与键k相关联的值。
❑ d[k] = v将值v关联到键k。
❑ del d[k]删除键为k的项。
❑ k in d检查字典d是否包含键为k的项。
虽然字典和列表有多个相同之处,但也有一些重要的不同之处。
❑ 键的类型:字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串或元组。
❑ 自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。然而,如果不使用append或其他类似的方法,就不能给列表中没有的元素赋值。
>>> d[3] = 'sunhao'
>>> d
{3: 'sunhao'}
❑ 成员资格:表达式k in d(其中d是一个字典)查找的是键而不是值,而表达式v in l(其中l是一个列表)查找的是值而不是索引。这看似不太一致,但你习惯后就会觉得相当自然。毕竟如果字典包含指定的键,检查相应的值就很容易。
示例:以任命用作键的字典,字典种包含键phone和addr,分别与电话号码相关联。
2.3 将字符串格式设置功能用于字典
2.3.1. format_map()方法:
format_map()方法:类似 str.format(*args, **kwargs) ,不同的是 mapping 是一个字典对象。
语法:format_map(mapping)
参数:mapping 是一个字典对象
返回值:针对字典类型的格式化后的新的对象
>>> People = {'name':'sunhao', 'age':'26'}
>>> print('My name is {name}, and I\'m {age} years old'.format_map(People))
My name is sunhao, and I'm 26 years old
2.4 字典方法
2.4.1 clear 删除所有的字典项
celar 方法清空字典和 赋值空字典清空字典的区别
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> y
{'key': 'value'}
>>> x = {}
>>> y
{'key': 'value'}
>>> # 使用clear删除字典
>>> x = {}
>>> y = x
>>> x['key'] = 'value'
>>> x.clear()
>>> y
{}
2.4.2 copy
方法copy返回一个新字典,其包含的键-值对与原来的字典相同(这个方法执行的是浅复制,因为值本身是原件,而非副本)
浅复制和深复制的区别。
2.4.3. fromkeys——方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。
>>> {}.fromkeys(['name', 'age'])
{'name': None, 'age': None}
>>> #这个示例首先创建了一个空字典,再对其调用方法fromkeys来创建另一个字典
>>> #这显得有点多余,可以直接对dict((dict是所有字典所属的类型。类和类型将在第7章详细讨论)调用方法fromkeys。
>>> dict.fromkeys(['name', 'age'])
{'name': None, 'age': None}
2.3.4 get
方法get为访问字典项提供了宽松的环境。通常,如果你试图访问字典中没有的项,将引发错误。
>>> d = {}
>>> print(d['name']
... )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'name'
而使用get不会这样:
>>> d = {}
>>> print(d.get('name'))
None
使用get来访问不存在的键时,没有引发异常,而是返回None。你可指定“默认”值,这样将返回你指定的值而不是None。
>>> d = {}
>>> print(d.get('name', 'N/A'))
N/A
2.3.5 items——方法items返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。字典项在列表中的排列顺序不确定。
2.3.6 keys——方法keys返回一个字典视图,其中包含指定字典中的键。
2.3.7 pop——方法pop可用于获取与指定键相关联的值,并将该键-值对从字典中删除。
2.3.8 value——返回一个由字典中的值组成的字典视图。不同于方法keys,方法values返回的视图可能包含重复的值。
2.3.9 popitem——返回并删除字典中的最后一对键和值。
如果字典已经为空,却调用了此方法,就报出 KeyError 异常。
参数:无
返回值:返回一个键值对(key,value)形式。