1 创建字典
1.1 直接创建
字典由键值对组成,可直接使用花括号包住字典的键值对,直接创建一个字典:
>>> tom = {'name': 'Tom', 'age': 60}
>>> tom
{'age': 60, 'name': 'Tom'}
1.2 dict 函数
1.2.1 使用元组作为实参
>>> items = [('name', '张三'), ('age', 40)]
>>> d = dict(items)
>>> d
{'age': 40, 'name': '\xd5\xc5\xc8\xfd'}
>>> print(d['name'])
张三
1.2.2 使用关键字实参
>>> d = dict(name = '周星驰', age = 60)
>>> d
{'age': 60, 'name': '\xd6\xdc\xd0\xc7\xb3\xdb'}
>>> print(d['name'])
周星驰
2 操作字典
2.1 把字典用于字符串格式化
可以使用字符串的格式化函数 format_map
,传入字典实参:
>>> actor={'name': '周星驰', 'age': 60, 'label': '喜剧之王'}
>>> '演员{name}今年{age}岁,他是著名的{label}'.format_map(actor)
'演员周星驰今年60岁,他是著名的喜剧之王'
2.2 设置字典项
>>> cartoon={}
>>> cartoon['name']='龙珠'
>>> cartoon['year']='1984'
>>> cartoon
{'name': '龙珠', 'year': '1984'}
>>>
>>> cartoon['name']='进击的巨人'
>>> cartoon['year']='2009'
>>> cartoon
{'name': '进击的巨人', 'year': '2009'}
2.3 删除所有字典项
>>> film={}
>>> film['name']='Titanic'
>>> film['boxOffice']='27亿美刀'
>>> film
{'name': 'Titanic', 'boxOffice': '27亿美刀'}
>>> film.clear()
>>> film
{}
2.4 浅拷贝
字典的 copy
方法可以实现浅拷贝:
>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actorReplica=actor.copy()
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actor['films'].remove('逃学威龙')
>>> actor
{'name': '周星驰', 'films': ['功夫', '喜剧之王']}
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王']}
从上面的运行效果可知,actor
的 films
删除了其中一项,actorReplica
的 films
也受到了影响。这说明,字典的 copy
函数实现的是浅拷贝功能。
2.5 深拷贝
使用 copy
模块的 deepcopy
函数可实现深拷贝:
>>> from copy import deepcopy
>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actorReplica=deepcopy(actor)
>>> actor
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actor['films'].remove('功夫')
>>> actor
{'name': '周星驰', 'films': ['喜剧之王', '逃学威龙']}
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
2.6 get获取value
要获取字典下的项,如果使用 dict[key]
,如果 key
不存在,则会报 KeyError
异常:
>>> artists={'周星驰': '演员', '张家辉': '演员', '张学友': '演员&歌手'}
>>> artists['黎明']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '黎明'
get
函数同样可以获取指定 key
对应的 value
,但不同的是,当 key
不存在时,函数返回 None
:
>>> artists={'周星驰': '演员', '张家辉': '演员', '张学友': '演员&歌手'}
>>>
>>>
>>> if artists.get('黎明') == None: print('没有黎明的信息')
...
没有黎明的信息
get
函数还支持设置默认值,即如果 key
不存在时,使用默认值实参作为函数返回值:
>>> artists={'周星驰': '演员', '张家辉': '演员', '张学友': '演员&歌手'}
>>> artists.get('黎明', '黎明不在名单中,他是四大天王之一')
'黎明不在名单中,他是四大天王之一'
2.7 fromkeys创建字典
字典的 fromkeys
方法,使用 list
实参中的元素作为 key
,创建一个 value
为 None
的字典对象:
>>> {}.fromkeys(['name', 'age', 'occupation', 'city'])
{'name': None, 'age': None, 'occupation': None, 'city': None}
如果不想默认 value
为 None
,则可以在 fromkeys
方法中传入默认值实参:
>>> {}.fromkeys(['name', 'age', 'occupation', 'city'], '未知')
{'name': '未知', 'age': '未知', 'occupation': '未知', 'city': '未知'}
2.8 items获取字典项列表
>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> items=actor.items()
>>> items
dict_items([('name', '周星驰'), ('films', ['功夫', '喜剧之王', '逃学威龙'])])
2.9 keys获取字典的key
>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actor.keys()
dict_keys(['name', 'films'])
2.10 pop 获取并删除项
>>> d={'name': '张三', 'age': 30}
>>> d
{'name': '张三', 'age': 30}
>>> d.pop('age')
30
>>> d
{'name': '张三'}
2.11 popitem 获取并删除最后一项
>>> d={'name': '张三', 'age': 30, 'role': 'developer', 'city': 'Guangzhou', 'country': 'China'}
>>> d.popitem()
('country', 'China')
>>> d
{'name': '张三', 'age': 30, 'role': 'developer', 'city': 'Guangzhou'}
>>> d.popitem()
('city', 'Guangzhou')
>>> d
{'name': '张三', 'age': 30, 'role': 'developer'}
>>> d.popitem()
('role', 'developer')
>>> d
{'name': '张三', 'age': 30}
>>> d.popitem()
('age', 30)
>>> d
{'name': '张三'}
>>> d.popitem()
('name', '张三')
>>> d
{}
2.12 setdefault
字典的 setdefault
用于获取指定 key
对应的 value
,当 key
不存在时,会为该 key
设置默认值;如果 key
存在时,则返回对应的 value
。
>>> d={}
>>> d.setdefault('name', "张三")
'张三'
>>> d
{'name': '张三'}
>>> d.setdefault('name', '李四')
'张三'
>>> d
{'name': '张三'}
2.13 values 获取 value 列表
>>> d={'name': '张三', 'age': 30, 'role': 'developer', 'city': 'Guangzhou', 'country': 'China'}
>>> d.values()
dict_values(['张三', 30, 'developer', 'Guangzhou', 'China'])