字典,就是一种基础的数据类型,是唯一的映射类型.就像新华字典一样,我们知道要查的字之后,找到他,我们就能查看这个字下面的解释,这个解释就是这个字的内容.

字典是无序的,这种无序是指他无法像列表一样人为的排序,在python3.6是按照创建的顺序打印出来.python3.5及以下是随机顺序打印的,但不管怎么打印出来,他无序的这个属性是不变的

涉及到两个方面,第一个是,键值存入时是按照哈希算法算出存放的位置存入,所以我们不能使用索引来寻找键值对

       第二个就是,字典写入时如果超出了他的存放空间,他会扩容,扩容时会进行重新计算后排序

字典是可变的数据类型,字典中的元素是一个一个的键值对.要记住的是键值对的键必须是不可变得,所以列表/集合/字典/含有列表的元组是不可以作为键使用的.值就没那么多讲究了

前面提到字典不能使用索引,那么我们应该使用什么方法提取字典中的值呢?

我们知道字典中的键是不可变的,那么我们就可以使用键来查找.比如我们有个字典dic,dic[键],就可以像列表的索引那样把字典的值拿出来了

还是分为四个方面说下基本方法吧:

一. 增加

1.简单粗暴

dic[键] = 值  就是添加了一个新的键值对进去,存在就是修改了,不在就是添加,不管怎么样,我就是要有这么一个键值对

dic = {1:2,3:4,5:6}
dic['呦'] = '爱你'
print(dic)
>>>{1: 2, 3: 4, 5: 6, '呦': '爱你'}

View Code

2.dic.setdefault(键,值)

这个就温和一些了,若是存在这个键,就不进行对这个字典修改,不存在,才会添加.

还要说一下,若是只填写了键,没有填值的话,键值对照样会创建成功,值默认就是None了

dic = {1:2,3:4,5:6}
dic.setdefault(7,8)
print(dic)
>>>{1: 2, 3: 4, 5: 6, 7: 8}#若是有这个键

dic = {1:2,3:4,5:6}
dic.setdefault(5,8)
print(dic)
>>>{1: 2, 3: 4, 5: 6}

View Code

二. 删除

1.dic.pop(键)

指哪删哪,删就是删整个键值对,返回值是删除的键值对的值

dic ={1: 2, 3: 4, 5: 6}
dic.pop(3)
print(dic)
>>>{1: 2, 5: 6}

View Code

2.dic.popitem()

这个删除就是随机删除,在python3.6就是默认删除最后一个了 ,popitem是有返回值的,返回的是以元组形式返回的删除的键值对.

dic ={1: 2, 3: 4, 5: 6}
print(dic.popitem())
print(dic)
>>>(5,6)
>>>{1: 2, 3:4}

View Code

三. 修改

修改的原理就是存在就修改,不在就是添加

1.简单粗暴用法^_^

dic[键] = 值,是不是和增加一样的简单粗暴

dic = {1:2,3:4,5:6}
dic[3] = '1+2'
print(dic)
>>>{1: 2, 3: '1+2', 5: 6}

View Code

2. dic.update(字典)

dic.update()的括号中放的是字典,这个字典的键相同,就修改值,不同的就添加

dic = {'a':1,'b':2,'c':3}
dic.update({'c':'1+2','d':4})
print(dic)
>>>{'a': 1, 'b': 2, 'c': '1+2', 'd': 4}#括号内放的是字典,所以我们可以理解为使用后面那个字典去更新前面这个字典
dic = {'a':1,'b':2,'c':3}
dict = {'c':'1+2','d':4}
dic.update(dict)
print(dic)
>>>{'a': 1, 'b': 2, 'c': '1+2', 'd': 4}#那么这种写法也是可以的

View Code

四. 查找

查就是像新华字典一样,给你键,找的到,就把键对应的值给你

s = dic.get(键,"返回值")

dic = {'a':1,'b':2,'c':3}
s = dic.get('a')
print(s)
>>>1
#若是填写的键是字典中没有的,就会返回None,可以自定义返回值
dic = {'a':1,'b':2,'c':3}
s = dic.get('d')
print(s)
s2 = dic.get('d','找不到')
print(s2)
>>>None
>>>'找不到'

View Code

tips.其他操作

1.先说3个差不多的吧,这3个输出的都是高仿列表,为什么说是高仿呢,因为他不能像列表那样使用索引,只能使用for循环

dic.keys()  提取字典中的所有键

dic = {'a':1,'b':2,'c':3}
print(dic.keys)
>>>dict_keys(['a', 'b', 'c'])

View Code

dic.values()  提取字典中所有值

dic = {'a':1,'b':2,'c':3}
print(dic.values())
>>>dict_values([1, 2, 3])

View Code

dic.items()  提取字典所有的键值对

dic = {'a':1,'b':2,'c':3}
print(dic.items())
>>>dict_items([('a', 1), ('b', 2), ('c', 3)])

View Code

  这3个方法,还是需要使用for循环拿出结果.但是我们for循环字典就可以直接拿出字典的键了,所以这3个是没用的

dic = {'a':1,'b':2,'c':3}
#提取键
for i in dic:print(i)
#提取值
for i in dic:print(dic[i])
#提取键值对
for i in dic:print(i,dic[i]

for循环

2. frozenset()

前面提到,集合是不能作为字典的键的,那么我非要让他作为字典的键呢?调皮~

dic = {'a':1,'b':2,'c':3}
s = {1,2,3,4,5}
dic[frozenset(s)] = 666
print(dic)
>>>{'a': 1, 'b': 2, 'c': 3, frozenset({1, 2, 3, 4, 5}): 666}
#这个方法意义何在,,

View Code

3.dic.fromkeys(键,值)

批量创建值相同的键值对

dic = {}
dic = dic.fromkeys(['a','b','c'], [1,2])
# 第一个是键, 第二个是值
print(dic)
dic["a"].append(3) # 所有的值都会添加,只有列表会全添加,因为列表是可变的
print(dic)

View Code

转载于:https://www.cnblogs.com/chenzhiming/p/10015994.html

dict--新华字典,没有新华相关推荐

  1. JioNLP:预处理、信息抽取、数据增强、NLP简单功能与词典,找它就对了!

    ⭐戳这里 -> JioNLP ⭐戳这里 => 在线直接使用版 -> JioNLP    pip install jionlp 来看看 JioNLP 能干什么?Ctrl+F 搜索一下 ...

  2. 字典(dict)的反转

    1.今天在写12306查询余票时,想给定字典(dict)的值,从而得到字典(dict)的键,但好像字典(dict)方法中没有与此相关的方法,只能退而求其次,反转字典(dict),将原字典(dict)的 ...

  3. 构建围绕新华字典展开的汉字网络

    一. 问题假设 我们开始学习汉字之初,都是学习的"一","二","大","小"等字,为什么我们会挑选这些字来作为学习汉字 ...

  4. 新华字典api 根据汉字拼音查询相关信息

    最大最全的新华汉语词典,新华字典api根据汉字的拼音,查询相关的汉字信息 接口名称:新华字典api 接口平台:第三方api 接口地址:http://v.juhe.cn/xhzd/querypy 支持格 ...

  5. Python dict字典(详解)

    文章目录 Python dict字典 一,Python创建字典 1) 使用 { } 创建字典 2) 通过 fromkeys() 方法创建字典 3) 通过 dict() 映射函数创建字典 二,Pytho ...

  6. 【Python学习教程】Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解

    文章目录 什么是序列,Python序列详解(包括序列类型和常用操作) 序列索引 序列切片 序列相加 序列相乘 检查元素是否包含在序列中 和序列相关的内置函数 Python list列表详解 Pytho ...

  7. 关于python中的dict和defaultdict

    dict 在Python中如果访问字典中不存在的键,会引发KeyError异常,所以一般当我们比如统计一句话的词频时候,我们总是使用这样的处理方式: strings = ('puppy', 'kitt ...

  8. AttributeError: 'dict' object has no attribute 'status_code'

    前端AJAX请求数据,提示错误:"AttributeError: 'dict' object has no attribute 'status_code'". 原因:是提示返回对象 ...

  9. Python3中对Dict的内存优化

    众所周知,python3.6这个版本对dict的实现是做了较大优化的,特别是在内存使用率方面,因此我觉得有必要研究一下最新的dict的源码实现. 前后断断续续看了大概一周多一点,主要在研究dict和创 ...

最新文章

  1. SQL Server的一个不显眼的功能 备份文件的分割
  2. linux redis经常自动关闭,Linux开启关闭redis
  3. python学习面向对象_python学习之面向对象学习
  4. 【Android】3.12 兴趣点( POI)搜索功能
  5. Python进阶_wxpy学习:原始数据
  6. MySQL 备份和恢复
  7. 在ASP.NET中调用存储过程方法新解
  8. VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程.
  9. 基于Docker的Mysql主从复制
  10. 基于FPGA ZC706的AD9371ADRV9009网口驱动配置
  11. Teleport Ultra网站静态资源下载工具
  12. android tv香橙派镜像,香橙派-如何通过dd制作系统镜像
  13. Python札记 -- 使用easy_install进行模块/包管理
  14. ThreeJS - 直接设置Fbx模型的某个关节的位移和旋转值
  15. JavaScript中deferred对象浅析
  16. 领先农业技术平台Dimitra,帮助小农户实现农业现代化
  17. 抖音,5.5亿!未来十年的流量入口,视频百科全书的梦,会成为现实吗?
  18. IDEA打开Maven项目一直indexing或 scanning files to index导致整个idea页面卡住 解决方法
  19. 计算机网络技术网络建设小结,计算机网络精品课程建设总结报告.doc
  20. python代码弄成网站_原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想)...

热门文章

  1. python 中的递归深度限制和重置
  2. kali 系列学习12-使用Wifite破解无线网络
  3. ssh localhost 出现 permission denied问题解决
  4. HBase入门:shell模糊查询
  5. 波动方程的能量均分定理
  6. 10_数据的个人管理
  7. RANSAC鲁棒估计算法
  8. java毕业设计网络学习平台源码+lw文档+mybatis+系统+mysql数据库+调试
  9. 汽车环视全国产化电子元件推荐方案
  10. 如何判断是否是ie浏览器和版本