字典是用大括号扩起来的,以逗号分隔的,一组键值对,键和值以冒号分隔 dic = {'key': 'value'}
字典增加元素
字典键值对的增加有两种方式:
方式一
是通过赋值的方式给字典添加
语法:
dict_name[key] = value
例1:
dt = {'name': 'Tony Stark', 'age': 30}
dt['gender'] = '男'
print(dt)
运行结果:
{'name': 'Tony Stark', 'age': 30, 'gender': '男'}
方式二
是利用 setdefault
方法添加,该方法有两个参数,第一个参数是键,第二个参数是默认值
注意:
如果 setdefault 里面的key已经存在了,则会返回该key对应的value,如果可以不存在,则加入并且value的值默认是None
语法:
setdefault(self, key, default=None, /)
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
例1:
dt = {'name': 'Tony Stark', 'age': 30}
dt['gender'] = '男'
# 方式二:
dt.setdefault('hobby', '骑行')
print(dt)
运行结果:
{'name': 'Tony Stark', 'age': 30, 'hobby': '骑行'}
字典删除元素
pop删除元素
pop删除需要给定key,如果key存在则删除,不存在而且没有给定默认值,就会报错
例1:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.pop('age')
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)
运行结果是:
删除后的字典是: {'name': 'Tony Stark'}
被删除键的值是: 30
例2:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.pop('hobby', '无此键名') # 有默认值,当键名不存在,返回默认值
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)
运行结果:
删除后的字典是: {'name': 'Tony Stark', 'age': 30}
被删除键的值是: 无此键名
例3:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.pop('hobby') # 没有默认值会报错
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)
运行结果:
Traceback (most recent call last):
File "/projects/oldboy/laptop/day05/dict字典.py", line 5, in
ret = dt.pop('hobby')
KeyError: 'hobby'
字典更改元素值
改变字典的值,由于字典的键是唯一的不能重复的,因此改变字典的键的值可以直接赋值
例1:
dt = {'name': 'Tony Stark', 'age': 30}
dt['age'] = 31
print(dt)
运行结果:
dt = {'name': 'Tony Stark', 'age': 31}
字典查询元素的值
方式一
直接取值的方式获取键的值,如果键不存在,会报错,推荐使用方式二的get方法
例1:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt['name']
print('指定键的值是:', ret)
运行结果:
指定键的值是: Tony Stark
方式二
通过get方法获取, 如果键不存在返回None
语法:
get(self, key, default=None, /)
Return the value for key if key is in the dictionary, else default.
例1:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.get('age')
print('指定键的值是:', ret)
运行结果:
指定键的值是: 30
其他方法
popitem
popitem删除一个键值对,并返回被删除的键值对(以元组的方式返回),默认是删除最后一个
例1:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.popitem()
print('删除后的字典是:', dt)
print('被删除键的值是:', ret)
运行结果:
删除后的字典是: {'name': 'Tony Stark'}
被删除键的值是: ('age', 30)
keys
keys获取字典的所有的键,返回类型是dict_keys
例1:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.keys()
print('指定键的值是:', ret)
print('类型是:', type(ret))
运行结果:
指定键的值是: dict_keys(['name', 'age'])
类型是:
values
values是获取字典的所有的值,返回类型是dict_values
例1:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.values()
print('指定键的值是:', ret)
print('类型是:', type(ret))
运行结果:
指定键的值是: dict_values(['Tony Stark', 30])
类型是:
items
items是以元组的方式返回键值对,返回类型是dict_items
例1:
dt = {'name': 'Tony Stark', 'age': 30}
ret = dt.items()
print('指定键的值是:', ret)
print('类型是:', type(ret))
运行结果:
指定键的值是: dict_items([('name', 'Tony Stark'), ('age', 30)])
类型是:
copy
copy 用于复制一个字典,同样这个跟一样存在一个深浅复制问题
例1:
import copy
dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
ret = copy.deepcopy(dt) # 这里如果不用深拷贝,那么在修改了dt后,ret的值也会修改
dt['hobby'][1] = '爬山'
print('dt的ID是:', id(dt))
print('ret的ID是:', id(ret))
print('dt的内容是:', dt)
print('ret的内容是:', ret)
运行结果:
dt的ID是: 140674238588752
ret的ID是: 140674109081352
dt的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '爬山']}
ret的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
例2:
dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
ret = dt.copy() # 浅拷贝
dt['hobby'][1] = '打乒乓球'
print('dt的ID是:', id(dt))
print('ret的ID是:', id(ret))
print('dt的内容是:', dt)
print('ret的内容是:', ret)
运行结果:
dt的ID是: 140709526153040
ret的ID是: 140709526153112
dt的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '打乒乓球']}
ret的内容是: {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '打乒乓球']}
clear
清空字典,返回值是None
例1:
dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
ret = dt.clear()
print('dt的内容是:', dt)
print('ret的内容是:', ret)
运行结果:
dt的内容是: {}
ret的内容是: None
update
update是将一个字典和另一个字典合并,如果有相同的键,值会被更新,如果没有新键会加入到字典中
例1:
dt = {'name': 'Tony Stark', 'age': 30, 'hobby': ['骑行', '游泳']}
dt2 = {'name': 'Tom', 'Phone_no': 123456} # 相同的键 name ,dt中name的值会被更新
ret = dt.update(dt2)
print('dt的内容是:', dt)
print('ret的内容是:', ret)
运行结果:
dt的内容是: {'name': 'Tom', 'age': 30, 'hobby': ['骑行', '游泳'], 'Phone_no': 123456}
ret的内容是: None