Python学习笔记二:字典
1. 定义
字典是Python提供的另一种可变容器模型,可存储任意类型的对象。
字典是由多组键值对(key:value)组成的,每个键值对之间用逗号分隔,键值对之间用冒号分隔,整个字典包裹在花括号{}中,具体格式如下:
dictname = {key1:value1,key2:value2,key3.......}
- 键key是索引
- 值value是数据
- dict是Python的关键字和内置函数,所以创建字典时,不建议使用dict作为字典名
- 键一般是唯一的,如果有重复的键值对插入进来,会替换掉前面的,值不是唯一的
- 值的数据可以是任意类型的,但键的数据类型只能是字符串,元组和数字
2. 字典的访问
① 通过键访问值
字典是一系列的键值对,每个键都对应着一个值,所以可以通过使用键来访问相应的值
>>> messages = {'name':'smith','gender':'Man','age':'26','job':'teacher','nationality':'Germany'} >>> messages['name'] 'smith' >>> messages['job'] 'teacher'
通过这种方法访问字典的值时,需要注意指定的键必须存在,否则会抛出异常
>>> messages['Degree'] Traceback (most recent call last): File "<pyshell#41>", line 1, in <module> messages['Degree'] KeyError: 'Degree'
② 使用get()方法访问值
dict.get(key[,value]):返回指定键的值
key:指定的键
value:可选,当指定的键不存在时,可以指定返回值
>>> messages.get('Degree','postgraduate') 'postgraduate'
③ 获取字典中的键
dict.keys()方法:返回一个字典内的所有键
>>> messages {'name': 'smith', 'gender': '男', 'age': '26', 'job': 'teacher', 'nationality': 'Germany'} >>> messages.keys() dict_keys(['name', 'gender', 'age', 'job', 'nationality'])
④ 获取字典中的值
dict.values():返回字典内的所有值
>>> messages.values() dict_values(['smith', '男', '26', 'teacher', 'Germany'])
⑤ 获取字典中的键和值
dict.items():以列表的形式返回字典内的键和值
>>> messages.items() dict_items([('name', 'smith'), ('gender', '男'), ('age', '26'), ('job', 'teacher'), ('nationality', 'Germany')])
3. 字典的修改
3.1 修改字典中的值
>>> messages {'name': 'smith', 'gender': '男', 'age': '26', 'job': 'teacher', 'nationality': 'Germany'} # 修改smith的工作和年龄 >>> messages['job'] = 'physician' >>> messages['age'] = 30 >>> messages {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician', 'nationality': 'Germany'}
3.2 删除字典中的键值
① 使用关键字del永久性删除
>>> messages = {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician', 'nationality': 'Germany'}
>>> del messages['gender'] >>> messages {'name': 'smith', 'age': 30, 'job': 'physician', 'nationality': 'Germany'}
② 弹出字典中的键值
和在列表中的用法相同,pop()方法在字典中同样使用
>>> messages = {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician', 'nationality': 'Germany'} >>> popped_key_value = messages.pop('nationality') >>> messages {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician'} >>> popped_key_value 'Germany'
3.3 添加键值对
① 通过键添加值
字典添加键值对非常简单,只需要给出新的键和对应的值即可
>>> messages = {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician', 'nationality': 'Germany'} # 添加smith的婚姻状态 >>> messages['Marital status'] = 'married' >>> messages {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician', 'nationality': 'Germany', 'Marital status': 'married'}
② 合并/扩展字典
在列表中,使用extend()方法将一个列表扩展到目标列表中,那么在字典,使用update()方法,来实现这一功能。
dict1.update(dict2):将字典dict2扩展更新到字典dict1中
由于字典中键的唯一性,所以在使用方法update()时,需要注意:如果被合并的字典中有已知的键值对时,会覆盖/替换原有的键值对
>>> information1 = {'name':'john','age':22,'job title':'intern'} >>> information2 = {'name':'john','age':'36','job title':'Deputy Chief Physician','Marital status':'married'} >>> information1.update(information2) >>> information1 {'name': 'john', 'age': '36', 'job title': 'Deputy Chief Physician', 'Marital status': 'married'}
总结:update()方法的用法就是:将字典中原本有的键值对更新,没有的键值对加上
3.4 判断键是否在字典中
>>> messages = {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician', 'nationality': 'Germany'} >>> 'job' in messages True >>> 'Marital status' in messages False
4. 字典排序
5. 字典的遍历
① 遍历键值对
>>> messages = {'name': 'smith', 'gender': '男', 'age': 30, 'job': 'physician', 'nationality': 'Germany'} >>> for key,value in messages.items(): print('%s:' % key.title()) value = str(value) print(value.title() + '\n') Name: Smith Gender: 男 Age: 30 Job: Physician Nationality: Germany
② 遍历键
>>> for key in messages.keys(): print(key.title()) Name Gender Age Job Nationality
③ 遍历值
>>> for value in messages.values(): value = str(value) print(value.title()) Smith 男 30 Physician Germany >>>
在遍历值的时候,很有可能会出现重复值,这是因为使用values()方法遍历字典,只是将字典中的值提取了出来,并没有考虑去重的问题,如果想要去重,可以使用函数set()。
set()的作用:创建一个无重复的元素集
>>> favorite_language= { 'john':'python', 'smith':'c++', 'ben':'go', 'amy':'python' } >>> for language in set(favorite_language.values()): print(language.title()) Python Go C++
6. 嵌套
6.1 字典列表
列表中的元素由字典组成,或者含有字典的列表,字典列表的本质是列表。
① 创建一个简单的字典列表
>>> student1 = {'name':'john','age':22} >>> student2 = {'name':'smith','age':21} >>> student3 = {'name':'amy','age':22} >>> students = [student1,student2,student3] >>> students [{'name': 'john', 'age': 22}, {'name': 'smith', 'age': 21}, {'name': 'amy', 'age': 22}]
② 字典列表元素的访问
>>> students[0]['name'] 'john' >>> for student in students: for key,value in student.items(): print(key + ':') print(value) print('----------------') name: john age: 22 ---------------- name: smith age: 21 ---------------- name: amy age: 22 ----------------
6.2 字典嵌套列表
① 创建一个嵌套列表的字典
>>> student_favorite_language = { 'john':['python','c'], 'smith':['java','html','go'], 'amy':['c++','python'] } >>> type(student_favorite_language) <class 'dict'>
② 访问
>>> student_favorite_language['john'][0] 'python' >>> for key,value in student_favorite_language.items(): for language in set(value): print(language) c python go java html c++
6.3 字典嵌套字典
① 创建一个嵌套字典的字典
>>> users = { 'William Morris': {'first_name': 'Morris', 'last_name': 'William', 'location': 'New York'}, 'Tom Cruise': {'first_name': 'Cruise', 'last_name': 'Tom', 'location': 'Los Angeles'}, 'John Dewey': {'first_name': 'Dewey', 'last_name': 'John', 'location': 'Chicago'} }
② 访问
>>> users['William Morris']['first_name'] 'Morris' >>> for key,value in users.items(): print(key+':') for key1,value1 in value.items(): print('%s:%s'%(key1,value1)) print('\n') William Morris: first_name:Morris last_name:William location:New York Tom Cruise: first_name:Cruise last_name:Tom location:Los Angeles John Dewey: first_name:Dewey last_name:John location:Chicago