【Python基础】dict(字典)

发布时间 2024-01-10 09:49:13作者: 小C学安全

简介介绍

dictionary(字典) 是 除列表以外 Python 之中 最灵活 的数据类型

  • 字典同样可以用来 存储多个数据
    通常用于存储 描述一个 物体 的相关信息

  • 和列表的区别
    列表 是 有序 的对象集合
    字典 是 无序 的对象集合

  • 字典用 {} 定义

字典特性

* 字典使用 键值对 存储数据,键值对之间使用 , 分隔
* 键 key 是索引
* 值 value 是数据
* 键 和 值 之间使用 : 分隔
* 键必须是唯一的
* key 必须为不可变数据类型(字符串、数字)
* 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
* 一个key对应的value可存放任意数据类型,可修改、可以不唯一
* 可嵌套,即value也可以是dict
* py3.7之前是无序的,3.7开始变成有序的。 ordered_dict
* 查询速度快,且不受dict的大小影响,至于为什么快?需要了解hash O (1)

字典用法

创建字典的两种方式

#第一种方式
msg1 = {
    "name":"小C学安全",
    "age":30
}
#第二种方式
msg2 = dict(name="小C学安全",age=30)

print(msg1)
print(msg2)

字典增删改查

msg={
    "name":"小C学安全",
    "age":30
}

#字典增加,修改
#字典[key] = value
msg["age"]=100
print(msg)
"""
{'name': '小C学安全', 'age': 100}
如果key存在,修改数据
如果key不存在,新建键值对
"""

msg.setdefault("height","180cm")
print(msg)
"""
{'name': '小C学安全', 'age': 100, 'height': '180cm'}
如果key存在,不会修改数据
如果key不存在,新建键值对
"""
msg2 ={
    "height":"180cm"
}
msg.update(msg2)
print(msg)
"""
{'name': '小C学安全', 'age': 100, 'height': '180cm'}
将msg2字典数据合并到msg1
"""
#字典查询
"""
字典[key] 从字典中取值,key不存在会报错
字典.get(key) 从字典中取值,key不存在不会报错
字典.keys() 所有key列表
字典.values() 所有value 列表
字典.items() 所有(key,value)元组列表
"""
# print(f'通过msg["name"]直接查询结果:{msg["name"]}')
#通过msg["name"]直接查询结果:小C学安全
# print(f'通过msg.get("name")直接查询结果:{msg.get("name")}')
#通过msg.get("name")直接查询结果:小C学安全
# print(f'查询所有key列表,msg.keys():{msg.keys()}')
#查询所有key列表,msg.keys():dict_keys(['name', 'age'])
# print(f'查询所有values,msg.values():{msg.values()}')
#查询所有values,msg.values():dict_values(['小C学安全', 30])
# print(f'查询所有(key,value)元组列表,msg.items():{msg.items()}')
#查询所有(key,value)元组列表,msg.items():dict_items([('name', '小C学安全'), ('age', 30)])
#批量创建
# names=["小C学安全","Python"]
# msg2=dict.fromkeys(names,"2")
# print(msg2)
# #{'小C学安全': '2', 'Python': '2'}
#拷贝
# msg1 =msg.copy()
# print(msg1)
#{'name': '小C学安全', 'age': 30}


#字典删除
del msg["name"]
print(msg)
"""
{'age': 100, 'height': '180cm'}
删除键值对,key不存在会报错
字典.pop(key) 删除指定键值对,key不存在会报错
字典.popitem() 随机删除一个键值对3.7以前
字典.clear() 清空字典数据
"""

字典循环遍历

msg={
    "name":"小C学安全",
    "age":30
}
#循环key值
for key in msg.keys():
    print(key)
"""
name
age
"""
for key,values in msg.items():
    print(key,values)


"""
name 小C学安全
age 30
"""

for key in msg:
    print(key)

"""
name
age
"""

字典推导式

"""
语法一:
    key:字典中的key
    value:字典中的value
    dict.items():序列
    condition:条件表达式
    key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
    value_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
'''

{key_exp:value_exp for key,value in dict.items() if condition}

'''
语法二:
    key:字典中的key
    value:字典中的value
    dict.items():序列
    condition:条件表达式
    key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理
    value_exp1:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp1处理
    value_exp2:在for循环中,如果条件表达式condition不成立(即条件表达式不成立),返回对应的key,value并作key_exp,value_exp2处理

'''

{key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
"""
# 案例一:获取字典中key值是小写字母的键值对
dict1 = {"a": 10, "B": 20, "C": True, "D": "hello world", "e": "小C学安全"}
dict2 = {key: value for key, value in dict1.items() if key.islower()}
print(dict2)

# 案例二:将字典中的所有key设置为小写
dict3 = {key.lower(): value for key, value in dict1.items()}
print(dict3)

# 案例三:将字典中所有key是小写字母的value统一赋值为'error'
dict4 = {key: value if key.isupper() else "error" for key, value in dict1.items()}
print(dict4)