XX学Python·字典
字典
-
以键值对形式存储,方便快速存取,字典的键要见名知意。字典占用空间远大于列表,牺牲空间利用快速存取的特性。
-
字典是无序的,因为不能通过索引进行键值对获取。Python3.5以后,字典中键值对顺序和我们插入顺序一致,但该顺序没法被利用。
-
字典定义格式:变量={键1:值1, 键2:值2...},空字典dict2 = {},或dict()方法定义。字典的键必须是不可变类型。数字、字符串、元组是不可变的。
dict1 = {'name': 'xiaoming', 'age': 18, 'gender': '女'}
dict2 = {}
print(dict1)
print(dict2)
# 字典中键是唯一的,不能有重复的键,否则后定义的键值会覆盖前面的。值可以重复。
dict3 = {'name': 'xiaoming', 'age': 18, 'id': 18, 'name': 'rose'}
print(dict3) # {'name': 'rose', 'age': 18, 'id': 18}前面xiaoming被换成rose
字典的'增'和’改‘
# 字典变量[key] = value
dict1 = {'name':'xx', 'age':18}
dict1['gender'] = '男' # 若原字典不存在该key,则新增
print(dict1) # {'name': 'xx', 'age': 18, 'gender': '男'}
dict1['name'] = 'lsl' # 若原字典存在该key,则修改原key所对应的值
print(dict1) # {'name': 'lsl', 'age': 18, 'gender': '男'}
# update方法格式:update({key:值})或update(key=值)
dict1.update({'id': '001'}) # 没有key则新增
print(dict1) # {'name': 'lsl', 'age': 18, 'gender': '男', 'id': '001'}
dict1.update({'name': 'rose'}) # 有key则修改
print(dict1) # {'name': 'rose', 'age': 18, 'gender': '男', 'id': '001'}
dict1.update(name='mx') # 不用{}的形式:update(key=值)
print(dict1) # {'name': 'mx', 'age': 18, 'gender': '男', 'id': '001'}
# update一般用于两个字典拼接,格式:字典1.update(字典2)
dict2 = {'w': 45, 'h': 170}
dict1.update(dict2)
print(dict1)
# {'name': 'mx', 'age': 18, 'gender': '男', 'id': '001', 'w': 45, 'h': 170}
字典的‘删‘
dict1 = {'name': 'xx', 'age': 18, 'gender': '男'}
# 格式:del 字典[key],根据键进行键值对的删除
del dict1['gender']
print(dict1) # {'name': 'xx', 'age': 18}
# clear()方法清空字典
dict1.clear()
print(dict1) # {}
# 字典.pop(key),删除指定键的键值对,会返回要删除的键对应的值。
dict2 = {'name': 'xx', 'age': 18, 'gender': '男'}
print(dict2.pop('gender')) # 男
print(dict2) # {'name': 'xx', 'age': 18}
# popitem(),随机删除一对,尝试后发现总是删除最后一对,以元组的形式返回删除的键值对。
dict3 = {'name': 'xx', 'age': 18, 'gender': '男'}
print(dict3.popitem()) # ('gender', '男')
print(dict3.popitem()) # ('age', 18)
print(dict3) # {'name': 'xx'}
字典的’查‘
dict1 = {'name':'xx', 'age':18}
# 查询方式一:dict[key],查询的key不存在会报错
print(dict1['name']) # xx
# print(dict1['gender']) # KeyError: 'gender'
# 查询方式二:dict.get(key,查询key不存在时返回的内容),key不存在时默认返回None
print(dict1.get('name')) # xx
print(dict1.get('gender')) # None
print(dict1.get('gender', '不存在此键')) # 不存在此键
# keys 获取当前字典所有的键
print(dict1.keys()) # dict_keys(['name', 'age'])
print(type(dict1.keys())) # <class 'dict_keys'>
# keys返回的内容是dict_keys类型,不能直接用索引查询,但可以进行for遍历
keys_1 = dict1.keys()
# print(keys_1[1]) # TypeError: 'dict_keys' object is not subscriptable
for i in keys_1: # 可以被迭代
print(i) # name 换行后 age
# values 获取当前字典所有的值
print(dict1.values()) # dict_values(['xx', 18]),可以进行for遍历
print(type(dict1.values())) # <class 'dict_values'>
# items 获取当前字典所有的键值对
print(dict1.items()) # dict_items([('name', 'xx'), ('age', 18)])
print(type(dict1.items())) # <class 'dict_items'>,可以进行for遍历
字典的遍历
dict1 = {'name': 'Tom', 'age': 20, 'gender': 'male'}
# 使用for循环对字典进行遍历,默认获取字典的每一个键
for i in dict1:
print(i) # name 换行后 age 换行后 gender
for i in dict1.keys():
print(i) # 同上获取每一个键
for i in dict1.values():
print(i) # 获取的是每一个值
for i in dict1.items():
print(i) # 获取字典每一对键值对组成的元组,结果如下
'''
('name', 'Tom')
('age', 20)
('gender', 'male')
'''
# 分别拿到字典的键和值
for i in dict1:
print(i, dict1[i])
for key,value in dict1.items():
print(key, value)
'''两个结果都如下
name Tom
age 20
gender mal
'''