字典是数据的无序集合,用于存储数据值。与其他仅将单个值作为项的数据类型不同,字典具有键-值对。字典中的键和值之间用冒号“:”分隔,而键-值对之间用逗号“,”分隔,所有键-值对用花括号“{}”括起来。字典的语法格式如下:
字典名 = {键1: 值1, 键2: 值2, …}
字典的工作方式类似于现实世界中的字典,字典的键必须是唯一的,并且是不可变的数据类型,如字符串、整数和元组,但是键的值可以重复,并且可以是任意类型。
下面介绍字典采用的主流方法。
1、setdefault()方法
字典的setdefault()方法用于指定一个键和一个值(键为第一个参数)。如果字典中存在指定的键,那么它和get()方法是等价的:
- >>> someone = {'name': 'Wang', 'age': 19}
- >>> someone.setdefault('age', 35) # 键'age'已存在,返回对应的值
- 19
- >>> someone # someone字典并没有改变
- {'name': 'Wang', 'age': 19}
如果字典中不存在指定的键,那么会在字典中添加键-值对:
- >>> someone = {'name': 'Wang', 'age': 19}
- >>> someone.setdefault('gender', 'female') # 键'gender'不存在
- 'female'
- >>> someone # someone字典中添加了'gender': 'female'键-值对
- {'name': 'Wang', 'age': 19, 'gender': 'female'}
setdefault()方法也可以不指定“值”,即第二个参数为空,此时默认的“值”为None:
- >>> someone = {'name': 'Wang', 'age': 19}
- >>> someone.setdefault('gender') # 未指定键-值对中的值
- >>> someone # 键'gender'的值为None
- {'name': 'Wang', 'age': 19, 'gender': None}
2、keys()方法
字典的keys()方法用于返回该字典所有键的字典视图:
- >>> someone = {'name': 'Wang', 'age': 19, 'hobbies': ['sing songs', 'dance', 'basketball']}
- >>> someone.keys() # 返回所有键的字典视图
- dict_keys(['name', 'age', 'hobbies'])
字典视图是一种特殊的类型,它可以迭代,这意味着可以用for循环迭代它:
- >>> someone = {'name': 'Wang', 'age': 19, 'hobbies': ['sing songs', 'dance', 'basketball']}
- >>> for key in someone.keys():
- ... print(key)
- ...
- name
- age
- hobbies
除了可迭代外,字典视图还有一个重要的特性,这也是它为什么被称为视图的原因。字典视图可以“实时”反映出字典当前的情况,当字典改变时,它的值也会随之改变(即使已经赋值给一个变量):
- >>> someone = {'name': 'Wang', 'age': 19, 'hobbies': ['sing songs', 'dance', 'basketball']}
- >>> someone_keys = someone.keys() # 先将keys()返回的值赋给变量
- >>> someone_keys
- dict_keys(['name', 'age', 'hobbies'])
- >>> del someone['hobbies'] # 再删除'hobbies'键-值对
- >>> someone_keys # someone_keys的值也随之改变
- dict_keys(['name', 'age'])
- >>> someone['gender'] = 'male' # 添加一个键-值对
- >>> someone_keys # someone_keys的值再次随之改变
- dict_keys(['name', 'age', 'gender'])
如果想要保存字典的状态,可以将字典视图复制到列表或元组中:
- >>> someone = {'name': 'Wang', 'age': 19, 'hobbies': ['sing songs', 'dance', 'basketball']}
- >>> someone_keys = list(someone.keys()) # 先使用list()将字典视图变成列表
- >>> someone_keys
- ['name', 'age', 'hobbies']
- >>> del someone['hobbies'] # 再删除'hobbies'键-值对
- >>> someone_keys # someone_keys的值并没有改变
- ['name', 'age', 'hobbies']
3、values()方法
字典的values()方法与keys()方法类似,只是它返回的是该字典所有值的字典视图:
- >>> someone = {'name': 'Wang', 'age': 19, 'hobbies': ['sing songs', 'dance', 'basketball']}
- >>> someone.values() # 返回所有值的字典视图
- dict_values(['Wang', 19, ['sing songs', 'dance', 'basketball']])
字典所有值的字典视图也可以迭代:
- >>> someone = {'name': 'Wang', 'age': 19, 'hobbies': ['sing songs', 'dance', 'basketball']}
- >>> for value in someone.values():
- ... print(value)
- ...
- Wang
- 19
- ['sing songs', 'dance', 'basketball']