首页 > Python资料 博客日记
【Python】字典
2024-09-16 23:00:35Python资料围观33次
Python资料网推荐【Python】字典这篇文章给大家,欢迎收藏Python资料网享受知识的乐趣
文章目录
什么是字典
键值对
字典是一种存储“键值对”的结构
把键(key
) 和 值(value
) 进行一个一对一的映射,然后就可以根据键,快速找到值
举个栗子:学校的每个同学,都会有一个唯一的学号
知道了学号,就能确定这个同学
此处 “学号” 就是 “键”,这个 “同学” 就是 “值”
在 Python
字典中,可以同时包含很多个键值对,同时要求这些键值对不能重复
创建字典
# 创建字典
a = { }
b = dict()
print(type(a))
print(type(b))
"""
打印结果
<class 'dict'>
<class 'dict'>
"""
设置初始值
也可以在创建字典的时候设置初始值
a = {
'id': 1,
'name': 'zhangsan'
}
print(a)
"""
打印结果
{'id': 1, 'name': 'zhangsan'}
"""
- 使用
,
分割不同的键值对;键值对中用:
分割不同的键和值 - 在这个字典 a 中,包含了两个键值对:
'id': 1
, key 就是'id'
,value
就是1
‘name’: zhangsan
,key 就是'name'
,value
就是'zhangsan'
- 一个字典中的
key
的类型不一定都一样- 一个字典中的
value
的类型也不必都一样- 字典对于
key
是什么类型,有约束- 字典对于
value
是什么类型,没有约束
查找 key
判定 key 是否存在
使用 in
来判定某个 key
是否在字典中存在
a = {
'id': 1,
'name': 'zhangsan'
}
print(('id' in a))
print('classId' in a)
"""
运行结果
True
False
"""
a
里面有'id'
这个key
,没有'classId'
这个key
- 这个操作只是判定
key
是否存在,和value
无关
使用 not in
来判定某个 key
在字典中不存在
a = {
'id': 1,
'name': 'zhangsan'
}
print(('id' not in a))
print('classId' not in a)
"""
运行结果
False
True
"""
根据 key 获取 value
a = {
'id': 1,
'name': 'zhangsan',
100: 'list'
}
print(a['id'])
print(a['name])
print(a[100])
"""
运行结果
1
'zhangsan'
'list'
"""
- 若根据一个不存在的 key 获取 value,就会报出“
KeyError '不存在的 key 名'
”的异常
- 对于字典来说,使用
in
或者[]
都是非常高效的操作- 对于列表来说,使用
in
比较低效,而使用[]
比价高效
- 因为
in
需要把整个列表遍历一遍- 字典背后使用了特殊的数据结构:哈希表
新增和修改
新增元素
在字典中新增元素,使用 [ ]
来进行
a = {
'id': 1,
'name': 'zhangsan'
}
a['score'] = 90
print(a)
"""
运行结果
{'id': 1, 'name': 'zhangsan', 'score': 90}
"""
修改元素
在字典中修改元素,使用 [ ]
来进行
a = {
'id': 1,
'name': 'zhangsan'
}
a['score'] = 90
print(a)
a['score'] = 100
print(a)
"""
运行结果
{'id': 1, 'name': 'zhangsan', 'score': 90}
{'id': 1, 'name': 'zhangsan', 'score': 100}
"""
- 如果
key
不存在,往里写入,相当于新增键值对- 如果
key
存在,往里写入,相当于根据key
修改value
- 新增和修改都是写操作
删除
使用 pop
方法,根据 key
来删除键值对
a = {
'id': 1,
'name': 'zhangsan'
}
a.pop('name')
print(a)
"""
运行结果
{'id': 1}
"""
字典中的各种操作,都是针对 key
来进行的,新增、删除、获取 value、修改 value…
遍历字典
遍历指的是能够把一个可迭代对象里面包含的元素依次地取出来,并进行一些操作,整个过程要求不重不漏
- 字典被设计出来的初衷,不是为了实现遍历,而是为了增删改查
- 字典是哈希表,进行增删改查的操作时效率是非常高的
- 而字典的遍历效率就要差一些
- 哈希表这个结构设计的非常巧妙,能够以“常数级”时间复杂度来完成增删改查
- 无论字典中有多少个元素,新增、修改、查找、删除操作的时间都是固定的,不会因为元素多了,操作就慢了
直接使用 for 来遍历字典
a = {
'id': 1,
'name': 'zhangsan',
'score': 100
}
for key in a:
print(key, a[key])
"""
运行结果
id 1
name zhangsan
score 100
"""
- 在
C++/Java
中,哈希表里面的兼职对存储的循序是无序的;但是在Python
中,其做了特殊处理,能保证遍历出来的顺序就是和插入的顺序一致
取出所有 key 和 value
keys
:获取到字典中的所有key
values
:获取到字典中的所有value
items
:获取到字典中的所有键值对
a = {
'id': 1,
'name': 'zhangsan',
'score': 100
}
print(a.keys())
print(a.values())
print(a.items())
"""
运行结果
dict_keys(['id', 'name', 'score'])
dict_values([1, 'zhangsan', '100'])
dict_items([('id', 1), ('name', 'zhangsan'), ('score', '100')])
"""
- 此处
dict_keys
是一个特殊的类, 专门用来表示字典的所有key
,大部分元组支持的操作对于dict_keys
同样适用 - 此处
dict_values
也是一个特殊的类型,和dict_keys
类似 - 此处
dict_items
也是一个特殊的类型,和dict_keys
类似
a = {
'id': 1,
'name': 'zhangsan',
'score': 100
}
for key, value in a:
print(key, value)
"""
运行结果
id 1
name zhangsan
score 100
"""
合法 key 的类型
不是所有的类型都可以作为字典的 key
字典本质上是一个哈希表,哈希表的 key
要求是 “可哈希的”,也就是可以计算出一个哈希值
- 可以使用
hash
函数计算某个对象的哈希值 - 但凡能够计算出哈希值的类型,都可以作为字典的
key
print(hash(0))
print(hash(3.14))
print(hash(True))
print(hash('hello'))
print(hash((1, 2, 3)))
"""
运行结果
0
322818021289917443
1
2364418584814311179
529344067295497451
"""
列表和字典是不可 hash
的,所以列表和字典不能作为 key
,其他类型都可以作为 key
- 一般认为不可变的对象就可哈希
- 可变的对象就不可以哈希
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj