这篇文章将会介绍 Python 中的字典,字典是 Python 唯一的内置映射类型
1、创建字典
字典由多组键值对组成,键可以是任何不可变类型,常见的有字符串和元组,对于值没有特别要求
可以使用字面量 {}
创建字典,字典中用 ,
分隔相邻项,用 :
分隔键和值
>>> # 创建一个空字典 >>> person = {} >>> # 创建带有元素的字典 >>> person = {'name': 'Jessica', 'age': 20}
也可以使用内置函数 dict()
创建字典,其参数可以是关键字实参,或者是其他映射类型
>>> # 传入关键字实参创建字典 >>> worker1 = dict(name = 'Nancy', workerID = 200189) >>> worker1 # {'name': 'Nancy', 'workerID': 200189} >>> # 从其他映射类型创建字典 >>> worker2 = dict([('name', 'Tommy'), ('workerID', 201901)]) >>> worker2 # {'name': 'Tommy', 'workerID': 201901}
2、索引元素
字典是通过键索引值的,一般格式为 dict['KEY']
>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36} >>> # 若指定的键在字典中存在,则返回对应的值 >>> dic['Apple'] # 15 >>> # 若指定的键在字典中不存在,就会引发错误,导致程序中断 >>> dic['Ant'] # KeyError
也可以用 get()
方法索引,当字典中不包含指定键时,会返回默认值 None
或其他指定值
>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36} >>> # 参数中没指定返回值,当字典中不包含指定键时,返回默认值 None >>> dic.get('Ant') # None >>> # 参数中有指定返回值,当字典中不包含指定键时,返回指定值 >>> dic.get('Ant', 0) # 0
还可以用 setdefault()
方法索引,当字典中不包含指定键时,会返回指定值,并在字典中添加该键值对
>>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36} >>> # 若指定的键在字典中存在,则返回对应的值 >>> dic.setdefault('Apple', 49) # 15 >>> # 若指定的键在字典中不存在,返回指定值,并在字典中添加该键值对 >>> dic.setdefault('Ant', 49) # 49 >>> dic # {'Apple': 15, 'Banana': 24, 'Carrot': 36, 'Ant': 49}
3、删除元素
既可以使用方法 pop(KEY)
删除字典指定的项,返回指定键所对应的值
>>> dic = {'A': 1 , 'B': 2 , 'C': 3 , 'D': 4 , 'E': 5} >>> dic.pop('C') # 3
也可以使用方法 popitem()
删除字典最后一项,返回所删除的项
>>> dic = {'A': 1 , 'B': 2 , 'C': 3 , 'D': 4 , 'E': 5} >>> dic.popitem() # ('E', 5)
还可以使用方法 clear()
删除所有字典项,这样的操作是就地执行的,不返回任何东西
>>> dic = {'A': 1 , 'B': 2 , 'C': 3 , 'D': 4 , 'E': 5} >>> dic.clear()
4、添加元素
字典添加元素的方法有点特别,它可以通过直接赋值添加元素,这也是字典和序列之间一个很大的不同
>>> # 列表 >>> li = ['Apple', 'Banana', 'Carrot'] >>> li[0] = 'Ant' # (修改元素) 可行,列表中的第一项变成 'Ant' >>> li[3] = 'Dog' # (添加元素) 不可行,IndexError: list assignment index out of range >>> # 字典 >>> dic = {'Apple': 15, 'Banana': 24, 'Carrot': 36} >>> dic['Apple'] = 30 # (修改元素) 可行,字典中键 'Apple' 对应的值变成 30 >>> dic['Dog'] = 40 # (添加元素) 可行,字典中新增一项,键为 'Dog' 值为 40
另外,update()
方法允许使用一个字典更新另一个字典
如果当前字典没有对应的键值,则添加它;如果当前字典包含键相同的项,则替换它
>>> dic1 = {'A': 1 , 'B': 2} >>> dic2 = {'B': 3 , 'D': 4} >>> dic1.update(dic2) >>> dic1 # {'A': 1, 'B': 3, 'D': 4}
5、字典迭代
有三种方法,keys()
返回字典中所有键,values()
返回字典中所有值,items()
返回字典中所有项
>>> dic = {'A': 1, 'B': 2, 'C': 3} >>> # 迭代字典中的键 >>> for key in dic.keys(): print(key) # A # B # C >>> # 迭代字典中的值 >>> for value in dic.values(): print(value) # 1 # 2 # 3 >>> # 迭代字典中的项 >>> for item in dic.items(): print(item) # ('A', 1) # ('B', 2) # ('C', 3)
这三种方法返回的都是一种叫做字典视图的类型,它们始终是字典底层的反映
>>> dic = {'A': 1, 'B': 2, 'C': 3} >>> items = dic.items() >>> items # dict_items([('A', 1), ('B', 2), ('C', 3)]) >>> dic['A'] = 3 >>> items # dict_items([('A', 3), ('B', 2), ('C', 3)])
6、字典推导
字典推导式与列表推导式类似,可用于快速创建字典,其基本格式如下:
dic = {key_expression(i):value_expression(i) for i in iterable if condition(i)}
翻译成一般语句就是:
dic = {} for i in iterable: if condition(i): dic[key_expression(i)] = value_expression(i)
- 示例 1:给出字符串列表,以字符串作为键、以字符串长度作为值,建立字典
>>> li = ['I', 'Love', 'Python'] >>> dic = {i:len(i) for i in li} >>> dic # {'I': 1, 'Love': 4, 'Python': 6}
- 示例 2:给出原始字典,将键和值交换位置,建立新的字典
>>> old_dict = {'A': 1, 'B': 2, 'C': 3} >>> new_dict = {v:k for k,v in old_dict.items()} >>> new_dict {1: 'A', 2: 'B', 3: 'C'}
7、字典排序
可以使用 sorted()
函数给字典排序,它总是返回一个序列
- 示例 1:按键排序
>>> old = {1: 'E', 5: 'A', 2: 'D', 4: 'B', 3: 'C'} >>> new = sorted(old.items(), key = lambda x: x[0]) >>> new # [(1, 'E'), (2, 'D'), (3, 'C'), (4, 'B'), (5, 'A')]
- 示例 2:按值排序
>>> old = {1: 'E', 5: 'A', 2: 'D', 4: 'B', 3: 'C'} >>> new = sorted(old.items(), key = lambda x: x[1]) >>> new # [(5, 'A'), (4, 'B'), (3, 'C'), (2, 'D'), (1, 'E')]
文章知识点与官方知识档案匹配,可进一步学习相关知识