字典
之前学的列表、元组和字符串都属于序列,都是有序的容器。今天我们学的是另外一种类型的容器映射,也可以叫字典(类似于散列表的一种数据结构)。为什么叫字典呢?因为它的使用方法就像字典一样,查询词语、获得词义。
Python中字典是一些**项(键——值)**组成。其中键和值中间用冒号(:)分隔,项之间用逗号分隔。整个字典放在花括号内。
字典中,键必须是独一无二的,而字典中的值无须如此
>>> phonebook = {'Alice':'2341', 'Beth': '9102', 'Cecil': '3258'}
函数dict
创建字典可以用dict函数,可以使用其他字典中创建字典,也可以使用关键字实参来调用这个函数。
关键字实参:以param = value的方式传递数据
使用方法如下:
>>> items = [('name', 'Gumby'), ('age', 42)]
>>> d = dict(items)
>>> d
{'name': 'Gumby', 'age': 42}
>>> # 上面是使用其他字典
>>> # 使用关键字实参来创建
>>> d = dict(name='Gumby', age=24)
>>> d['name']
基本的字典操作
- len(d)返回字典d包含的项(键-值对)数。
- d[k]返回与键k相关的值。
- d[k] = v将值v关联到键k。
- del d[k]删除键为k的项。
- k in d检查字典d是否包含键为k的项。
除了这些基本操作以外,字典有一些和列表不同的特点(重要)。 - 键的类型: 字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串或元组。
- 自动添加: 即便是字典中原本没有的键, 也可以给它赋值。这将在字典中创建一个新项。如果不使用append或其他类似的方法,就不能给列表中没有的元素赋值。区别如下列所示。
- 成员资格: 表达式k in d(其中d是一个字典)查找的是键而不是值,而表达式v in l (其中l是一个列表)查找的是值不是索引。
>>> x = []
>>> x[42] = 'foobar'
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
x[42] = 'foobar'
IndexError: list assignment index out of range
>>> x = {}
>>> x[42] = 'foobar'
>>> x
{42: 'foobar'}
字符串格式设置功能用于字典
字典也可以使用格式设置功能,只要使用format_map来指出你将通过一个映射来提供所需的信息。
>>> phonebook = {'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
>>> "Cecil's phone number is {Cecil}".format_map(phonebook)
"Cecil's phone number is 3258"
字典方法
字典也有很多方法,下面大致列举一下。
方法 | 含义 |
---|---|
clear | 删除所有的字典项(就地执行) |
copy | 返回一个新字典(这个方法执行的是浅复制,因为值本身是原件,而非副本) |
fromkeys | 创建一个新字典,其中包含指定的键,且每个键对应的值都是None。 |
get | 访问字典时,若没有则返回None,也可返回指定的串。 |
items | 返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。字典项的在列表中的排列顺序不确定。 |
keys | 返回一个字典视图,其中包含指定字典中的键。 |
pop | 用于获取于指定键相关联的值,并将该键-值对从字典中删除。 |
popitem | 随机弹出一个字典项。 |
setdefault | 获取于指定键相关联的值,但是如果没有指定的键时,在字典中添加指定的键-值对。 |
update | 使用一个字典的项来更新另一个字典。 |
values | 返回一个由字典中的值组成的字典视图。(可能会有重复的值) |
小结
学习到的新函数
函数 | 描述 |
---|---|
dict(seq) | 从键-值对、映射或关键字参数创建字典。 |