Python有六大标准数据类型:数字(Number)、字符串(String)、列表(List)、元组(Tuple)、字典(Dict)、集合(Set)
本文讲其中一种数据类型:字典(Dict)
字典特点、特性
特点: Dict 是可变的,它不是序列
特性
键必须为不可变类型(如数字,字符串或元组)
如果键重复,那么重复键对应的值后面会把前面的值覆盖掉,但是位置还是前面的位置
值可以为任何标准数据类型,而且也可以重复
创建字典的五种方式
方式一:直接在空字典{}里面写键值对
a = {'姓名': '小哇', '年龄': 28}
print(a) # {'姓名': '小哇', '年龄': 28}
方式二:定义一个空字典,再往里面添加键值对
a = dict() # a = {} 这样写也可以
a['姓名'] = '小哇'
a['年龄'] = 28
print(a) # {'姓名': '小哇', '年龄': 28}
方式三:把键作为关键字传入
a = dict(姓名 = "小哇", 年龄 = 28)
print(a) # {'姓名': '小哇', '年龄': 28}
方式四:可迭代对象方式来构造字典
a = dict([("姓名", "小哇"), ("年龄", 28)]) # 这里用元组/列表/集合都是可以的
print(a) # {'姓名': '小哇', '年龄': 28}
方式五:通过 zip() 把对应元素打包成元组,类似于上一种方法
a = dict(zip(["姓名", "年龄"], ["小哇", 28]))
print(a) # {'姓名': '小哇', '年龄': 28}
访问和修改字典
访问字典里的值
diction = {'Name': '小明', 'Age': 7, 'Class': 'First'}
# 可以理解为通过字典的键去索引对应的值
print(diction['Name']) # '小明'
print(diction['Age']) # 7
# print(diction['age']) # 没有的键, 则报错
修改字典
# 指定键值对, 如果键已经存在, 则修改值;如果键不存在, 则在最后增加键值对
d1 = {"身高":175, "体重":65}
d1["身高"] = "1米75"
d1["名字"] = "张三"
print(d1) # {'身高': '1米75', '体重': 65, '名字': '张三'}
字典常用函数
len(dict) 返回字典中键的个数
# 后面的键'身高'和前面的重复了,则对应的值175会覆盖'1米75',所以还是3个键
dic = {'身高':'1米75', '体重':65, '名字':'张三', '身高':175}
num = len(dic)
print(num) # 3
dict.keys() 返回一个可迭代对象(字典的所有键)
d1 = {'身高':175, '体重':65, '肤色':'黑色', '名字':'张三'}
a = d1.keys()
print(a)
print(list(a)) # 将可迭代对象转换为列表
key01 = [k2 for k2 in a] # 列表推导式,遍历可迭代对象
print(key01)
key02 = [k2 for k2 in d1] # 列表推导式,直接遍历字典
print(key02)
输出:
dict_keys(['身高', '体重', '肤色', '名字'])
['身高', '体重', '肤色', '名字']
['身高', '体重', '肤色', '名字']
['身高', '体重', '肤色', '名字']
dict.values() 返回一个可迭代对象(字典的所有值)
d1 = {'身高':175, '体重':65, '肤色':'黑色', '名字':'张三'}
a = d1.values()
print(a)
print(list(a)) # 将可迭代对象转换为列表
key01 = [k2 for k2 in a] # 列表推导式,遍历可迭代对象
print(key01)
输出:
dict_values([175, 65, '黑色', '张三'])
[175, 65, '黑色', '张三']
[175, 65, '黑色', '张三']
dict.items() 返回(键,值)元组组成的可迭代对象
d1 = {'身高':175, '体重':65, '肤色':'黑色', '名字':'张三'}
a = d1.items()
print(a)
print(list(a))
key_values = [i for i in a]
print(key_values)
输出:
dict_items([('身高', 175), ('体重', 65), ('肤色', '黑色'), ('名字', '张三')])
[('身高', 175), ('体重', 65), ('肤色', '黑色'), ('名字', '张三')]
[('身高', 175), ('体重', 65), ('肤色', '黑色'), ('名字', '张三')]
dict.get(key, default=None) 返回指定的键对应的值, 如果值不在字典中默认返回 None
key:指定的键
default:如果指定的键不存在时,返回该值,默认为 None
dic = {"身高":175, "体重":65}
a = dic.get("身高")
print(a) # 175
a = dic.get("身", "没有这个键")
print(a) # "没有这个键"
dict.update(dict2) 把 dict2 字典的键值对更新到字典 dict 里,无返回值
d1 = {'身高':175, '名字':'张三'}
d2 = {'肤色':'巨黑'}
d3 = {'身高':'1米75'}
# 把字典d2的键值对添加到字典d1的末尾
d1.update(d2)
d1.update(d3) # 重复键,值会被覆盖
print(d1) # {'身高': '1米75', '名字': '张三', '肤色': '巨黑'}
# 把字典的键作为关键字参数来更新键值对
d1.update(体重 = 105, 肤色 = '小白')
print(d1) # {'身高': '1米75', '名字': '张三', '肤色': '小白', '体重': 105}
dict.pop(key) 删除字典中指定键 key 所对应的值,而且还会返回为被删除的值
d1 = {'身高':175, '名字':'张三', '年龄':18}
pop_obj = d1.pop('年龄')
print(d1) # {'身高': 175, '名字': '张三'}
print(pop_obj) # 18
dict.popitem() 删除字典中的最后一个键值对,而且还会返回为被删除的键值对
dic = {'name': '小明', '年龄': 18, '学历': '本科'}
pop_obj = dic.popitem()
print(pop_obj)
print(dic)
dict.copy() 返回一个字典的浅复制
dic = {'name': '小明', '年龄': 18, '学历': '本科'}
new_dic = dic.copy()
print(new_dic) # {'name': '小明', '年龄': 18, '学历': '本科'}
dict.clear() 删除字典内所有元素,无返回值
dic = {'name': '小明', '年龄': 18, '学历': '本科'}
dic.clear()
print(dic) # {}
原文链接:https://blog.csdn.net/m0_46076716/article/details/107929344