字典介绍

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'}

字典操作

字典的操作我们跟前面介绍一样,也是使用增删改查的顺序介绍。在我们开始之前,我们先了解下字典元素的获取。

字典中不存在索引,那如何获取里面的数据呢?两种方式:

  1. 字典名[key]的方式获取

  2. 字典名.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()

  1. del 字典名[key] : 删除指定key的键值对

  2. 字典对象.pop(key) : 用于获取指定 key 对应的 value,并删除这个 key-value 对

  3. 字典对象.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字典详解相关推荐

  1. 【Python基础】Python字典详解-超级完整版

    本文的目录: 一.字典概述 01 字典的格式 Python字典是一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 字典的每个键值key=>value对用冒号 : 分割 ...

  2. 【python】什么是序列,Python序列详解

    什么是序列,Python序列详解 概述 序列索引 序列切片 序列相加 序列相乘 检查元素是否包含在序列中 序列相关的内置函数 range 快速初始化数字列表 概述 所谓序列,指的是一块可存放多个值的连 ...

  3. python多线程详解 Python 垃圾回收机制

    文章目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 总结起来,使用多线程编程具有如下几个优点: 二.线程实现 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 ...

  4. Python线程详解

    Python线程详解 线程简介 开启多线程 线程之间共享 GIL全局解释器锁 线程间通信 线程简介 线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元. ...

  5. 07 Python数据类型详解

    文章目录 一.整数类型(int)详解 1.1 整数的不同进制 1) 十进制形式 2) 二进制形式 3) 八进制形式 4) 十六进制形式 1.2 数字分隔符 1.3 相关方法 二.字符串类型(strin ...

  6. Python数据类型详解03

    原文博客地址: Python数据类型详解03 第一篇Python数据类型详解01中主要介绍了Python中的一些常用的数据类型的基础知识 第二篇Python数据类型详解02文章中, 详细介绍了数字(N ...

  7. Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

    文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...

  8. Python Class 详解

    Python Class 详解 1.基本概念 1.1 类 `class` 1.2 对象 `instance / object` 1.3 面向对象三要素 1.4 哲学思想 2.类 2.1 类的定义 2. ...

  9. python区块链开发_Fabric区块链Python开发详解

    Hyperledger Fabric是最流行的联盟区块链平台.Fabric区块链Python开发详解课程 涵盖Fabric区块链的核心概念.Fabric网络搭建.Node链码开发.Python应用开发 ...

最新文章

  1. 《C++ Primer Plus》读书笔记之七—内存模型和名称空间
  2. Flash ActionScript 2.0基础教程
  3. python异步回调函数的实现
  4. 矩阵分析 (八) 矩阵的直积
  5. 我的世界服务器启动端怎么制作教程,我的世界怎样制作和运行服务器 详细制作教程一览...
  6. iOS 13 SceneDelegate适配
  7. MySQL(密码恢复及设置)
  8. [MIT]微积分重点 第四课 指数函数(exponential) 学习笔记
  9. 易烊千玺成为罗莱家纺品牌代言人
  10. Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)
  11. 当动作捕捉遇上圣诞节,原来如此有趣
  12. python开发autocad_利用Python自动化操作AutoCAD的实现
  13. 如何为窗体应用程序显示控制台
  14. (附源码)springboot考研规划系统 毕业设计 541230
  15. 重邮计算机专业毕业月薪多少,高校就业质量报告⑥ | 重庆邮电大学2020届毕业生月均收入6800元...
  16. 国家开放大学2021春1194建设监理题目
  17. Ubuntu安装nvidia显卡驱动,CUDA与CUDNN
  18. 机器学习:sklearn实现心脏病预测
  19. Synplify Pro软件的使用
  20. windows全局热键_将全局热键添加到Windows Media Player

热门文章

  1. 【Win10】我们无法更新系统保留的分区
  2. Unity NavMeshAgent参数及API
  3. 学淘宝美工设计真的很难吗?学历不高能做淘宝美工设计吗?
  4. 日常见到的一些js轮子
  5. 浏览器不支持flash插件之后,h5播放rtmp直播流的解决方案
  6. 富人高管都有门路避税,中基层的你怎么办?
  7. 操作系统的自我修养-02-玩你妹的“BIOS”
  8. C语言捉弄人的程序,给大家几个捉弄人的小方法(请谨慎使用!)
  9. 县级层面深入“最多跑一次”改革的成功实践
  10. 外汇保证金交易理性的加仓方式