Python - 基础数据类型 dict 字典
字典简介
- 字典在 Python 里面是非常重要的数据类型,而且很常用
- 字典是以关键字(键)为索引,关键字(键)可以是任意不可变类型
- 字典由键和对应值成对组成,字典中所有的键值对放在 { } 中间,每一对键值之间用逗号分开
字典栗子
var = {'a': 'A', 'b': 'B', 'c': 'C'}
字典中包含 3 个键值对
- 键 ‘a’ 的值是 ‘A’
- 键 ‘b’ 的值是 ‘B’
- 键 ‘c’ 的值是 ‘C’
字典通常用于描述对象的各种属性
例如一本书,有书名、作者名、出版社等各种属性,可以使用字典描述如下
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
}
键的取值规则
- 可以是任意不可变类型
- 通常是字符串或数字
- 如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作键
- 但如果元组直接或间接地包含了可变对象,那么它就不能用作键
- 列表不能用作键
声明一个空字典
# 空字典
dict_ = {}
print(dict_,type(dict_)) dict_ = dict()
print(dict_,type(dict_)) # 输出结果
{} <class 'dict'>
{} <class 'dict'>
读取字典
两种方式
- 通过索引 [ key ]
- 通过 .get(key) 方法
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
}
print(book["title"])
print(book["author"])
print(book.get("press"))
print(book.get("a"))
两种方式有啥区别?
- .get(key) 当 key 不存在的时候会返回 None
- [ key ] 如果 key 不存在则会报错 KeyError: 'authors'
修改字典
两种方式
- 通过索引 [ key ] 赋值
- 通过 .update() 方法
# 修改字典
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
} book["author"] = "小菠萝"
print(book) book.update({"title": "新书"})
print(book) # 输出结果
{'title': 'Python 入门基础', 'author': '小菠萝', 'press': '机械工业出版社'}
{'title': '新书', 'author': '小菠萝', 'press': '机械工业出版社'}
在字典中增加键值对
# 新加键值对
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
}
book["money"] = 22
print(book) # 输出结果
{'title': 'Python 入门基础', 'author': '张三', 'press': '机械工业出版社', 'money': 22}
在字典中删除键值对
两种方式
- 通过关键字 del
- 通过 .pop(key)
# 删除键值对
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
} del book["press"]
print(book) print(book.pop("author"))
print(book) # 输出结果
{'title': 'Python 入门基础', 'author': '张三'}
张三
{'title': 'Python 入门基础'}
查询字典
通过关键字 in 检查字典中是否包含指定键
# in
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
} print("title" in book)
print("titles" in book)
print("张三" in book) # 输出结果
True
False
False
常见函数
len
获取字典中键值对的数量
# len
var = {'a': 'A', 'b': 'B', 'c': 'C'}
print(len(var)) # 输出结果
3
list
返回包含该字典中所有键的列表
# list
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
}
print(list(book)) # 输出结果
['title', 'author', 'press']
- 这个返回结果是无序的
- tuple() 一样也可以这样哦,返回的是键组成的元组
sorted
返回包含该字典中所有键的有序列表
# sorted
book = {
'title': 'Python 入门基础',
'author': '张三',
'press': '机械工业出版社'
}
print(sorted(book)) # 输出结果
['author', 'press', 'title']
dict() 创建字典对象详解
重点
dict 是一个类,而不是函数
源码

从源码注释来看,dict 有四种传参方式,下面将一一举例
创建空字典
# 创建空字典
dict1 = dict()
print(dict1) # 输出结果
{}
通过 iterable 创建字典
# 传递 list 来创建字典
mid = [("a", 1), ("b", 2)]
dict2 = dict(mid)
print(dict2) # 输出结果
{'a': 1, 'b': 2}
iterable 的详解:https://www.cnblogs.com/poloyy/p/14658433.html
通过关键字参数创建字典
# 传递关键字参数来创建字典
dict3 = dict(name="yy", age=24)
print(dict3) # 输出结果
{'name': 'yy', 'age': 24}
通过另一个字典对象创建字典
mid = {"title": [1, 2, 3]}
# 相当于浅拷贝
dict4 = dict(mid)
print(dict4)
print(id(mid), id(dict4))
mid["name"] = "test"
mid["title"][1] = 1
print(mid, dict4)
# 输出结果
{'title': [1, 2, 3]}
4498981760 4500413824
{'title': [1, 1, 3], 'name': 'test'} {'title': [1, 1, 3]}
这种传参方式相当于浅拷贝,新的字典对象和旧的字典对象并不指向同一个对象引用
假设直接用赋值的方式,因为字典是可变对象,所以新旧字典对象都会指向同一个对象引用
dict1 = {1: 1}
dict2 = dict1
print(id(dict1), id(dict2))
# 输出结果
4355281792 4355281792
所以,当想复制一个新的字典对象但是又不想指向同一个对象引用的话,最好还是使用 dict() 的方式
字典常见方法
https://www.cnblogs.com/poloyy/p/15084264.html
遍历字典的多种方式
https://www.cnblogs.com/poloyy/p/15084302.html
Python - 基础数据类型 dict 字典的更多相关文章
- python基础数据类型--dict 字典
字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必 ...
- Python基础数据类型之字典
基础数据类型之字典 ps:数据类型划分:可变数据类型和不可变数据类型. 不可变数据类型:元组(tupe).布尔值(bool).整数型(int).字符串(str).不可变数据类型也称为可哈希. 可变 ...
- python基础(六)dict字典和文件操作open
字典dict 使用key来标注value的数据类型,key和value是一一对应的.在字典中key是唯一的,所以字典也是无序的. #定义一个字典 dict = { 'name' : 'sylar', ...
- python基础数据类型之字典的操作
一. 字典的简单介绍字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key- ...
- Python基础数据类型-字典(dict)
Python基础数据类型-字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟 ...
- 『Python基础-10』字典
# 『Python基础-10』字典 目录: 1.字典基本概念 2.字典键(key)的特性 3.字典的创建 4-7.字典的增删改查 8.遍历字典 1. 字典的基本概念 字典一种key - value 的 ...
- Python基础知识(五)------字典
Python基础知识(四)------字典 字典 一丶什么是字典 dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 键: 必须是可哈希,(不可变的数据类型 ...
- Python 入门之Python基础数据类型及其方法
Python 入门之Python基础数据类型 1. 整型:int 用于计算,用于比较 (在赋值的时候先执行等号右边的内容) 1.1 整数的加 a = 10 b = 20 print(a + b) 结果 ...
- 图解python | 基础数据类型
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- NOIP模拟测试23「mine·water·gcd」
mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...
- 基于GIS的国土空间规划平台建设
本期介绍基于地理信息平台的国土空间规划平台的规划辅助编制应用.在梳理国土空间规划科学流程的基础上,将规划编制各关键环节信息化.工具化.智能化:充分发挥清华同衡大数据与智能模型相结合的定量评估.精准 ...
- 入门Kubernetes - .Net Core 运行
前言: 之前文章 对Kubernetes 的一些基础概念及在windows下的环境搭建,接下来把.Net Core 运行到Kubernetes 中,在实际的操作中,对Kubernetes 的进一步学习 ...
- Springboot下载Excel的3种方式
Springboot下载Excel的3种方式 汇总一下浏览器下载和代码本地下载实现的3种方式. (其实一般都是在代码生成excel,然后上传到oss,然后传链接给前台,但是我好像没有实现过直接点击就能 ...
- 7、resync实时备份
sersync+rsync(增量,无差异备份),resync支持多线程,效果比inotify更好,配置思想和inotify很相似 7.1.在备份服务器上安装并配置rsync服务,实现nfs共享目录,可 ...
- Java数据库开发(三)之——补充
一.SQL注入与防范 使用PreparedStatement替代Statement对象,它提供了参数化SQL的方式 二.事务 定义 事务是并发控制的基本单位,满足ACID特征 原子性:atomicit ...
- JAVA并发(8)-ThreadPoolExecutor的讲解
很久前(2020-10-23),就有想法学习线程池并输出博客,但是写着写着感觉看不懂了,就不了了之了.现在重拾起,重新写一下(学习一下). 线程池的优点也是老生常谈的东西了 减少线程创建的开销(任务数 ...
- C++智能指针之shared_ptr与右值引用(详细)
1. 介绍 在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露.解决这个问题最有效的方法是使用智能指针(smart pointer).智能指针是存储指向动态分配(堆)对象指针 ...
- Python分析【公众号】历史评论,看看大家的留言情况!
大家好,我是辰哥~~~ 辰哥玩公众号有一段时间了,这期文章分析一波读者的留言情况,不仅可以对公众号的各位铁粉一目了然,还可以通过分析的结果对公众号的经营进行更好的规划.如读者留言的内容通常是内容是什么 ...
- leetcode156场周赛5206
思路分析: 1.两个数组,一个保存字符,一个保存字符出现次数 2.遍历一遍字符串,出现相同的字符,次数加一,且次数到k的话,那么就剔除,没到k,就次数加一.如果不同,就把它加入到字符的数组里面,对应次 ...