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
'''
posted @ 2022-10-04 22:53  PORTB  阅读(26)  评论(0编辑  收藏  举报