一、字典 Dict 操作
字典键值对的添加和修改数据
字典可以通过 dict[key]=new_value 来修改字典中可以key对应的value,不想字符串列表和元组,字典是没有索引的,如果key存在则dict[key]=new_value是修改value,如果key不存在,则会往字典中添加新的键值对
user = { 'name': 'stark', 'age': 40 } print('初始user的id的地址为:', id(user)) # 更新 user['name'] = 'Tony Stark' print(user) print('更新后的user的id地址为:', id(user)) # 添加 user['nickname'] = 'IronMan' print(user) print('添加键值对后的user的id为:', id(user)) 复制代码
字典是可变数据类型,修改和添加都是在原字典基础上的更改
使用 update 函数可以一次性修改所有key对应的value,update函数既添加新的字典,如新字典中的key有和原字典中的key重复,则该key的value会被新字典的value 覆盖
update 无返回返回值,并且是在原字典上进行这些操作
setdefualt 函数可以获取指定 key 对应的 value,如果 key 不存在字典中,将会添加 key 并将value设置为默认值
user = {'username': 'stark', 'address': 'NY'} user['username'] = 'Tony Stark' print(user) user['nickname'] = 'IRONMAN' print(user) new_user = {'username': 'peter', 'address': 'Queens', 'age': 18} user.update(new_user) print(user) user.setdefault('nickname', 'Spider Man') print(user['nickname']) user.setdefault('name', 'stank') print(user['name']) 复制代码
字典的 keys 函数
keys 函数可以获取当前字典中的所有的键,keys函数无须传递参数,并且返回一个key集合的伪列表,这个伪列表不具备列表的所有功能
project = { 'id': 1, 'name': 'youtest', 'purpose': 'autotest' } keys = project.keys() print(keys) print(type(keys)) keys_list = list(keys) print(type(keys_list)) print(keys_list) 复制代码
字典的 values 函数
values 函数用来返回字典中所有的value的集合,该函数无须传递参数,返回的是一个不具备所有列表功能的伪列表
project = { 'id': 1, 'name': 'youtest', 'purpose': 'autotest' } values = project.values() print(values) print(type(values)) values_list = list(values) print(type(values_list)) print(values_list) 复制代码
字典中 key 的获取
字典中除了通过[]来获取指定key的value还可以通过get函数来获取指定 key 的 value
dict.get(key, default=None) 复制代码
- key:需要获取value的key
- default:key不存在时返回此默认值,默认为None,也可以自定义
[] 与 get 的区别:
- [] 如果获取的key不存在,则直接报错
- get如果获取的key不存在,则直接返回默认值
- 实际开发中优先使用get获取指定key的value
user_info = { 'id': 1, 'username': 'liilth', 'password': 'pc12138' } values = [] values.append(user_info['id']) values.append(user_info['username']) values.append(user_info['password']) print(values) values.append(user_info['create_time']) 复制代码
# 代码与上面的一致 print(values) values.append(user_info.get('create_time')) print(values) 复制代码
使用get函数获取key对应的value,key不存在则获取默认值None
设置默认值
# 代码与上面一致 values.append(user_info.get('update_time', '03-31')) print(values) 复制代码
key存在则不会使用get设置的默认值
# 代码与上面一致 values.append(user_info.get('username', 'tony stark')) print(values) 复制代码
字典中key的值为None时,使用get函数设置默认值,取得是None;无论字典中存的值是什么类型的,只要可以被存入字典中,就可以成功获取
字典的删除操作
有三个函数可以对字典进行删除操作:
- clear:清空当前字典中的所有数据,不会删除字典,无参数、无返回值
- pop:删除字典中指定的Key,入参为指定的Key,返回字典中Key对应的Value,Key不存在会报错
- del:可以删除字典中的键值对,也可以删除整个字典既删除字典所在变量
- popitem:删除当前字典末尾的一对键值,并返回一个元组类型的数据(删除的键值对),无须传递参数;如果字典为空则会报错
user_info = { 'id': 1, 'username': 'liilth', 'password': 'pc12138' } print('执行clear函数前字典的内容为:{}'.format(user_info)) user_info.clear() print('执行clear函数后字典的内容为:{}'.format(user_info)) 复制代码
user_info = { 'id': 1, 'username': 'liilth', 'password': 'pc12138' } print('执行pop函数前字典的内容为:{}'.format(user_info)) id_val = user_info.pop('id') print('执行pop函数的返回值为删除的Key对应的Value:{}'.format(id_val)) print('执行pop函数后字典的内容为:{}'.format(user_info)) print('再次执行删除id的操作') id_val_01 = user_info.pop('id') 复制代码
字典中的每个Key只能执行一次pop操作,key不存在时会报错
user_info = { 'id': 1, 'username': 'liilth', 'password': 'pc12138' } print('执行del操作前字典的内容为:{}'.format(user_info)) del user_info['username'] print('字典执行del操作删除指定的Key后:{}'.format(user_info)) print('del删除不存在的key') del user_info['username'] 复制代码
del函数删除的方式与pop函数稍有不同,相同的是如果Key不存在,del执行删除Key的操作也会报错
del user_info print(user_info) 复制代码
user_info = { 'username': 'liilth', } removed_key_value = user_info.popitem() print(removed_key_value) print(type(removed_key_value)) user_info.popitem() 复制代码
返回元组是为了防止修改
字典 copy
copy函数可以将当前的字典复制出一个新的字典,copy函数无入参,返回一个新的字典,新字典与原字典内容相同,但是内存地址不同
fruits = { 'apple': 30, 'banana': 20, 'pear': 100 } copy_fruits = fruits.copy() print('字典fruits的内存地址为:{}'.format(id(fruits))) print('新字典copy_fruits的内存地址为:{}'.format(id(copy_fruits))) fruits.pop('pear') print('fruits执行删除Key的操作后:{}'.format(fruits)) print(copy_fruits) 复制代码
执行copy操作后,两个字典是完全不同的,一个字典的操作不会对另一个有影响
字典成员操作
判断字典成员的方式有两种:
- in 和 not in 成员操作符可以判断Key是否存在与字典中
- 字典的内置函数 get 可以获取指定Key的值,如果Key不存在时返回None,也可以
in 与 not in 成员操作符只能判断key是否存在,不会对Value是否存在进行判断
fruits = { 'apple': 30, 'banana': 20, 'pear': 100, 'organge': None } apple_is_exist = 'apple' in fruits print(apple_is_exist) value_is_exist = 30 in fruits print(value_is_exist) pear_value_is_exist = 100 in fruits print(pear_value_is_exist) none_is_exist = None in fruits print(none_is_exist) 复制代码
内置函数 get 可以获取指定Key的Value,如果Key不存在则获取到的Value为空,也可以指定默认值
user_info = { 'id': 1, 'username': 'liilth', 'password': 'pc12138' } print('Key存在时获取的Value:', user_info.get('username')) print("设置不存在的Key的默认值", user_info.get('create_time', 16578924543)) print("Key不存在时返回:", user_info.get('update_time')) 复制代码