Python字典详解
字典介绍
Python中还有一个很重要的数据类型就是字典,其实集合的底层使用的也是字典。
Python字典区别于其他的'容器'类型(list、tuple、set)的是里面存放的数据都是有映射关系的数据。
比如有份用户信息等级的数据如下:
小宝:13850501856
小鹏:13900881234
小亮:13899006745
小音:15900671234
小伦:15899996789
这组数据可以看成两个列表,但这两个列表的元素之间有一定的关联关系。如果单纯使用两个列表来保存这组数据,则无法记录两组数据之间的关联关系。那怎么办呢?
Python 提供了字典,可以保存具有映射关系的数据,所以字典相当于保存了两组数据。其中一组数据是关键数据,被称为 key,里面的数据是不能重复的;另一组数据可通过 key 来访问,被称为 value,value是允许重复的。
形象地看,字典中 key 和 value 的关联关系如图所示:
由于字典中的 key 是非常关键的数据,而且程序需要通过 key 来访问 value,因此字典中的 key 不允许重复。
如何声明一个字典呢?我们使用的是: 花括号或者大括号 即{}. 下面是一个空字典的声明
dict1 = {}
print(type(dict1))
结果:
<class 'dict'>
有映射关系的字典声明方式:
dict1 = {'小宝':'13850501856','小鹏':'13900881234'}
print(dict1)
dict 是一种类型,它就是 指Python 中的字典类型,在使用花括号语法创建字典时,花括号中应包含多个 key-value 对,key 与 value 之间用英文冒号隔开,如果有多个 key-value 对之间用英文逗号隔开.
字典中的键key是不允许重复的,如果里面有重复的,后面的默认覆盖前面的。
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小宝':'13850508000'}
print(dict1)
结果:
{'小宝': '13850508000', '小鹏': '13900881234'}
但是如果值有重复的是没有关系的。
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13900881234'}
print(dict1)
结果:
{'小宝': '13850501856', '小鹏': '13900881234', '小亮': '13900881234'}
字典操作
字典的操作我们跟前面介绍一样,也是使用增删改查的顺序介绍。在我们开始之前,我们先了解下字典元素的获取。
字典中不存在索引,那如何获取里面的数据呢?两种方式:
字典名[key]的方式获取
字典名.get(key,defaultvalue)的方式获取
# 字典
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13899006745','小音':'15900671234','小伦':'15899996789'}
print(dict1['小亮'])
print(dict1['小伦'])
或者使用
print(dict1.get(''小亮''))
print(dict1.get('小伦'))
允许发现结果是相同的,但是有什么区别呢?区别就是如果key在字典中不存在的情况下。第一种方式报错,第二种方式不报错,而且还可以设置默认值
# print(dict1['小飞']) 报错的
print(dict1.get('小飞'))
print(dict1.get('小飞','不存在此数据')) #
get方法的第一个参数是key,第二个参数是默认值,即没有找到对应的key,显示的内容。
添加与修改元素
刚才在里面没有发现小飞,我们如何将小飞的信息加到字典里面呢?添加的方式:
字典名[key] = 新值
上面这个用法对字典会产生两种影响,一种是添加一个键值对,一种是修改里面的一个键值对的值。
判断是哪一种,关键点是看key在字典中是否存在。如果key没有在字典中存在则添加一个键值对,否则如果存在则修改一个键值对。
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13899006745','小音':'15900671234','小伦':'15899996789'}
print(len(dict1)) # 打印长度为5
dict1['小飞'] = '18912346666'
print(dict1) # 添加了一个键值对
print(len(dict1)) # 打印长度发现变成了6
# 如果key是小音呢?
dict1['小音'] = '13918185656'
print(dict1) # 发现小音原来的手机号码发生了改变,变成了刚才的13918185656
有类似用法的还有:
setdefault(key, value): 该方法总能返回指定 key 对应的 value;但是如果该 key-value 对不存在,则先为该 key 设置默认的 value,然后再返回该 key 对应的 value,存在则直接返回key对应的value值
update(dict参数):可使用一个字典所包含的 key-value 对来更新己有的字典。在执行 update() 方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去。没有返回值。
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13899006745','小音':'15900671234','小伦':'15899996789'}
print(len(dict1)) # 打印长度为5result1 = dict1.setdefault('小飞','18912346666')
print(dict1)
print(result1)result2 = dict1.update({'小战':'18912346666'})
print(dict1)
print(result2)
结果:
{'小宝': '13850501856', '小鹏': '13900881234', '小亮': '13899006745', '小音': '15900671234', '小伦': '15899996789', '小飞': '18912346666'}
18912346666
{'小宝': '13850501856', '小鹏': '13900881234', '小亮': '13899006745', '小音': '15900671234', '小伦': '15899996789', '小飞': '18912346666', '小战': '18912346666'}
None
添加或者修改元素使用较多的还是上面的那两种,下面的setdefault和update了解即可。
删除元素
元素删除方法也有多种,比如使用del、pop()、popitem()
del 字典名[key] : 删除指定key的键值对
字典对象.pop(key) : 用于获取指定 key 对应的 value,并删除这个 key-value 对
字典对象.popitem() : popitem() 方法用于随机弹出字典中的一个 key-value 对。
dict1 = {'小宝': '13850501856', '小鹏': '13900881234', '小亮': '13899006745', '小音': '15900671234', '小伦': '15899996789', '小飞': '18912346666', '小战': '18912346666'}
print(len(dict1)) # 打印长度为7del dict1['小战']
print(len(dict1)) # 打印长度为6dict1.pop('小宝')
print(len(dict1)) # 打印长度为5dict1.popitem()
print(len(dict1)) # 打印长度为4
均可以实现元素的删除,其实第一种和第二种是类似的,就看是否想获取被删除的元素了。
如果全部都不想要可以使用clear(),即字典对象.clear()
查找元素
查找元素仍然是使用关键字in,但是如果直接用在字典上只能判断值是否存在与字典中。如果要判断值是否存在就要借助values()方法。
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13899006745','小音':'15900671234','小伦':'15899996789'}
print(len(dict1)) # 打印长度为5if '小宝' in dict1:print('小宝在啊!')
else:print('怎么小宝丢了啊?')
但是不能判断手机号码是否存在?此时借助values()
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13899006745','小音':'15900671234','小伦':'15899996789'}
print(len(dict1)) # 打印长度为5if '13850501856' in dict1.values():print('嘻嘻!有这个号码太好了')
else:print('呜呜~~没有找到这个号码呢')
values()表示获取字典中的所有值。当然也可以把字典中的值通过for循环打印出来
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13899006745','小音':'15900671234','小伦':'15899996789'}
for value in dict1.values():print(value)
字典中除了有获取所有值的方法values(),还有获取键的keys(),还有获取键值对的items()
dict1 = {'小宝':'13850501856','小鹏':'13900881234','小亮':'13899006745','小音':'15900671234','小伦':'15899996789'}
# 遍历打印所有的key
for key in dict1.keys():print(key)# 遍历打印所有的键值对
for key,value in dict1.items():print(key,value)
打印结果:
小宝
小鹏
小亮
小音
小伦
小宝 13850501856
小鹏 13900881234
小亮 13899006745
小音 15900671234
小伦 15899996789
案例展示
通过字典我们可以完成一个图书管理系统。代码如下
library = [{'bookname': '西游记', 'author': '吴承恩', 'price': 100, 'number': 40},{'bookname': '水浒传', 'author': '施耐庵', 'price': 100, 'number': 40},{'bookname': '红楼梦', 'author': '曹雪芹', 'price': 100, 'number': 40},{'bookname': '天珠变', 'author': '唐三少', 'price': 100, 'number': 40},{'bookname': '西游记', 'author': '吴成恩', 'price': 100, 'number': 40}
]while True:oper = input('\n1. 借书 \n2. 还书\n3. 查询\n4. 查看所有\n5. 退出\n请选择你需要的服务:')if oper == '1':print('1.借书模块')# 输入书名 --->bookname = input('请输入书名:')for book in library:if bookname in book.values():if book['number']>0:book['number']-=1print('借书成功!')else:print('库存不足')breakelse:print('没有这本书呢!')elif oper == '2':print('2.还书模块')bookname = input('请输入书名:')for book in library:if bookname in book.values():book['number']+=1print('还书成功!')breakelse:print('没有这本书呢!')elif oper == '3':print('3.查询模块(书名/作者)')message = input('请输入书名/作者名:')for book in library:if message in book.values():print('有这本书哦!可以借阅的')breakelse:print('没有这本书或者用户名')elif oper == '4':print('4.查看所有模块')for book in library:print(f"图书名:{book['bookname']},作者:{book['author']},价格:{book['price']},库存剩余{book['number']}")elif oper == '5':print('5.退出')print('系统正常退出')breakelse:print('请从新选择')
-END-
扫码添加请备注:python,进群与宋老师面对面交流:517745409
Python字典详解相关推荐
- 【Python基础】Python字典详解-超级完整版
本文的目录: 一.字典概述 01 字典的格式 Python字典是一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 字典的每个键值key=>value对用冒号 : 分割 ...
- 【python】什么是序列,Python序列详解
什么是序列,Python序列详解 概述 序列索引 序列切片 序列相加 序列相乘 检查元素是否包含在序列中 序列相关的内置函数 range 快速初始化数字列表 概述 所谓序列,指的是一块可存放多个值的连 ...
- python多线程详解 Python 垃圾回收机制
文章目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 总结起来,使用多线程编程具有如下几个优点: 二.线程实现 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 ...
- Python线程详解
Python线程详解 线程简介 开启多线程 线程之间共享 GIL全局解释器锁 线程间通信 线程简介 线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元. ...
- 07 Python数据类型详解
文章目录 一.整数类型(int)详解 1.1 整数的不同进制 1) 十进制形式 2) 二进制形式 3) 八进制形式 4) 十六进制形式 1.2 数字分隔符 1.3 相关方法 二.字符串类型(strin ...
- Python数据类型详解03
原文博客地址: Python数据类型详解03 第一篇Python数据类型详解01中主要介绍了Python中的一些常用的数据类型的基础知识 第二篇Python数据类型详解02文章中, 详细介绍了数字(N ...
- Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)
文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...
- Python Class 详解
Python Class 详解 1.基本概念 1.1 类 `class` 1.2 对象 `instance / object` 1.3 面向对象三要素 1.4 哲学思想 2.类 2.1 类的定义 2. ...
- python区块链开发_Fabric区块链Python开发详解
Hyperledger Fabric是最流行的联盟区块链平台.Fabric区块链Python开发详解课程 涵盖Fabric区块链的核心概念.Fabric网络搭建.Node链码开发.Python应用开发 ...
最新文章
- 《C++ Primer Plus》读书笔记之七—内存模型和名称空间
- Flash ActionScript 2.0基础教程
- python异步回调函数的实现
- 矩阵分析 (八) 矩阵的直积
- 我的世界服务器启动端怎么制作教程,我的世界怎样制作和运行服务器 详细制作教程一览...
- iOS 13 SceneDelegate适配
- MySQL(密码恢复及设置)
- [MIT]微积分重点 第四课 指数函数(exponential) 学习笔记
- 易烊千玺成为罗莱家纺品牌代言人
- Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)
- 当动作捕捉遇上圣诞节,原来如此有趣
- python开发autocad_利用Python自动化操作AutoCAD的实现
- 如何为窗体应用程序显示控制台
- (附源码)springboot考研规划系统 毕业设计 541230
- 重邮计算机专业毕业月薪多少,高校就业质量报告⑥ | 重庆邮电大学2020届毕业生月均收入6800元...
- 国家开放大学2021春1194建设监理题目
- Ubuntu安装nvidia显卡驱动,CUDA与CUDNN
- 机器学习:sklearn实现心脏病预测
- Synplify Pro软件的使用
- windows全局热键_将全局热键添加到Windows Media Player