博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
七丶Python字典
阅读量:5298 次
发布时间:2019-06-14

本文共 3909 字,大约阅读时间需要 13 分钟。

创建字典

什么是字典

  • 字典就是用于保存具有映射关系的数据,字典相当于保存两组数据,其中一组是关键数据,成为key;另一组数据可以通过key来访问,被称为value
  • 特性: 字典中每一个key对应一个value,每一个key都不能相同,但是value可以多个相等

    创建字典

  1. 花括号法:花括号应包含多组key-value对,key-value之间用英文的冒号隔开;多组key-value对之间使用英文逗号隔开
#字典中key和value一一对应,key都是独一无二的不可以相同,value可以多个相同scores = {'语文':89,'数学':78,'英语':95,'地理':78}print(scores)
  1. dict构造器:可以传入多个列表或元组参数作为key-value对;也可以为dict指定关键字参数创建字典,此时字典的key不允许使用表达式
#使用dict创建字典时,列表/序列中的每个元素必须包含两个子元素如下,如若子元素个数不为2,则字典创建失败,返回'ValueError: dictionary update sequence element #3 has length 3; 2 is required'dicta = dict([('小学',7),('初中',13),('高中',16),('大学',19)])print(dicta)
#使用关键字参数创建字典(dict)时,不能使用表达式dictb = dict(小学=7,初中=13,高中=16,大学=19)print(dictb)
  1. 字典的key是不可变的,因此列表不能作为dict的key

操作字典key-value对

  • 使用方括号和key来访问key对应的value值
#字典中通过key访问valuedictb = dict(小学=7,初中=13,高中=16,大学=19)print(dictb['高中'])
  • 当对不存在的key赋value值时,相当于给字典添加字典元素
#字典元素的添加dictb = dict(小学=7,初中=13,高中=16,大学=19)dictb['社会实践'] = 'forever'print(dictb)
  • 当对已存在的key赋value值时,相当于替换字典中对应key的value值
#字典元素替换dictb = dict(小学=7,初中=13,高中=16,大学=19)dictb['高中'] = 'forever'print(dictb)
  • 删除key-value对
#字典元素的删除dictb = dict(小学=7,初中=13,高中=16,大学=19)del dictb['高中']print(dictb)
  • 将指定的key赋值为None时不能删除key-value对
#字典元素的删除dictb = dict(小学=7,初中=13,高中=16,大学=19)del dictb['高中']dictb['大学'] = Noneprint(dictb)del dictb['大学']print(dictb)#我这里赋值为None后依然可以被删除,有点疑惑这是为什么,大佬可以评论告诉我,谢谢!
  • 使用in、not in判断dict是否包含指定的key
#使用in 、not in判断元素是否再字典内dictb = dict(小学=7,初中=13,高中=16,大学=19)print('小学' in dictb)        #返回True 说明'小学'在dictb中print('初中' not in dictb)    ##返回False 说明'小学'在dictb中

理解dict和list的关系

  • 字典相当于索引,是任意不可变类型的列表,而列表相当于key只能是整数的字典;如果程序中要使用字典的key都是整数类型,则可以考虑是不是要换成列表
  • 列表的索引总是从0开始,也不需要连续。因此列表不允许对不存在的索引赋值;但字典则允许直接对不存在的key赋值,这样就会直接给字典新增了一对key-value值

# 总结:

字典(dict)和列表(list)都是可变的,都可以对内部元素进行增加、删除、修改的操作
但是因为字典的key是不可变的,所以列表(list)不能直接赋值于key

字典用法的进阶

字典的常用方法

  • dir(dict) 查看字典所支持的方法
  • clear() 用于清空字典的所有key-value对
#clear()清空字典内所有key-value,被清空的字典就是一个空字典返回'{}'scores = {'语文':89,'数学':78,'英语':95,'地理':78}scores.clear()print(scores)
  • get() 方法其实就是根据key来获取value
#get()根据key来获取value值scores = {'语文':89,'数学':78,'英语':95,'地理':78}print(scores.get('数学'))
  • update()方法可使一个字典所包含的key-value对来更新另一个已有的字典.
#使用update()方法,用一个新的字典去更新另一个已有的字典scores = {'语文':89,'数学':78,'英语':95,'地理':78}scores_a = {'语文':90,'数学':98,'生物':76}scores_b = [('历史',98),('自然',75),('Python',100)]scores_c = dict(彭同学=88,雷同学=79,李同学=90)   #注意使用关键字定义字典时,括号内不允许有表达式(key不需要引号)scores.update(scores_a)print(scores)#更新目标.update(使用对象)scores_a.update(scores_b)print(scores_a)#若字典使用序列作为参数,此时序列的每个元素必须包含两个子元素,第一个是key,第二个是valuescores_temp = dict(scores_b)    #先将列表转为字典scores_temp.update(scores_c)    #再使用scores_c,来更新这个转化好的字典print(scores_temp)#注意使用关键字定义字典时,括号内不允许有表达式(key不需要引号)
  • iteme()、keys()、value()分别用于获取字典中所有的key-value、所有的key、所有的value
#使用items()、keys()、values()分别遍历字典中的所有元素(每个元素包含一个key,一个value)、遍历字典中的所有key(只遍历key)、遍历所有value(只遍历value)scores = {'语文':89,'数学':78,'英语':95,'地理':78}for key in scores.keys():    print(key)    for value in scores.values():    print(value)    for item in scores.items(): #liems这里面使用到了序列的解包    print(item)
  • pop() 方法用于获取、并删除指定key对应的value
#使用pop()方法获取并删除key对应的value(删除并返回key对应的value值)scores = {'语文':89,'数学':78,'英语':95,'地理':78}return1 = scores.pop('地理')print(scores)print(return1)
  • popitem()方法用于随机地弹出字典中一个key-value对
  • setdefault()方法也用与根据key来获取对应value的值,并为不存在的key设置默认值(创建字典的地三种方法)
#使用setdefault()方法获取对应key的value值,如果key不存在,则添加一个key到字典中并设置value为Nonescores = {'语文':89,'数学':78,'英语':95,'地理':78}a = scores.setdefault('数学')print(a)scores.setdefault('生物')print(scores)
  • fromkeys() 方法可将序列转化为字典,可以给转化的字典设置一个固定的value值
#使用formkeys()转化序列为字典d = dict.fromkeys(['RNG','IG','BLG','LNG'],35)  #dict.fromkeys(序列,value默认值) = newscoresprint(d)

使用字典对字符串格式化

  • 在字符串模板中按key指定变量,然后通过字典为字符串模板中的key设置值
#使用字典格式化字符串str1 ="今年是%4.0f年""我在学习%s"print(str1%(2019,'Python'))     #普通的格式化字符串str2 = "今年是%(nian)4.0f年""我在学习%(name)s"  #字典格式化字符串print(str2 % {'nian':2019,'name':'Python'})

总结:
两种字符格式化原理其时是一样的,不同的时第一种是根据字符的先后位置来填充字符串;而字典格式化字符串则是根据设置好的key来指定对应的value

转载于:https://www.cnblogs.com/mlcg/p/11285175.html

你可能感兴趣的文章
中标麒麟QT+ODBC+人大金仓开发环境配置
查看>>
NopCommerce换主题这件小事
查看>>
zabbix监控日志文件
查看>>
ThinkPHP函数详解:U方法
查看>>
正则表达式
查看>>
pip install torch on windows, and the 'from torch._C import * ImportError: DLL load failed:' s...
查看>>
环套树
查看>>
[转]Repeat Page Header on each Page for reports SSRS
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2734: 国家排序
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
Notepad++ 16进制编辑功能
查看>>
Caffe: Cannot create Cublas handle. Cublas won't be available
查看>>
Linux 下 LXD 容器搭建 Hadoop 集群
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C语言作业3
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
koogra--Excel文件读取利器
查看>>
ASP.NET 使用ajaxupload.js插件出现上传较大文件失败的解决方法
查看>>