python几大核心之——字典(dict)

1.什么是字典

学生时代都用过字典吧?通过这个字的读音或者偏旁就能用字典查到其相关信息,词性,意思,组词,造句,还有在什么场合下用这个字等等的。

在python中的这个字典,其实原理是一样的,当然,python里的这个字典肯定不是用来查字的,是用来查我们需要的数据的,不过,如果你真要用python字典来查哪个字也是可以的,通过python的网络爬虫来查字就行,而且不止查字,可以查很多东西。

字典的特征号是花括号{}

2.字典的作用:

用来关联数组,或者叫归类数据

3.创建字典的多种方式:

a:直接赋值创建

此处可以看出字典和前面列表,元组,集合都不同的,[‘x‘]是key,中文名叫键,用[:]连接,[1]是value,中文名叫值,这三者合在一起作为字典的一个元素。一般称呼字典内一个元素为键值对

b:通过工厂函数dict和关键字参数创建(什么是关键字参数后面的章节会提到)

c:通过二元组列表创建

d:dict和zip结合创建

zip函数,可以将两个对象结合在一起:

注意python2和python3中zip函数的区别,上面两张图已经给出

e:通过dict.fromkeys()创建

注意fromkeys()方法的用法,自行体会

3.字典的方法

python2:

python3:

因为前后两者差别确实挺大的,结合实际,我就折中抽取都常用的几个:

clear,copy,fromkeys,get,items,keys,pop,popitem,update,setdefault,values

clear:清楚所有,和前一章集合的clear方法几乎一样,不再解析

copy:拷贝,和前一章集合的copy方法几乎一样,也不再解析

fromkeys:生成一个字典对象,上面创建字典时已经讲解

get:根据给的键返回值

注意:get方法,第一个参数是字典的键,第二个参数可有可无。如果访问的字典的键不存在,默认不返回任何东西,如果加入了第二个参数,键不存在则返回给定的第二个参数,但是必须符合python的语法规则

items:以列表的形式返回字典的所有键值对

keys:以列表的形式返回字典的所有键,和items原理相同不再展示

values:以列表的形式返回字典的所有值,和items原理相同不再展示

pop:给定键,删除对应的键值对并返回

popitem:按照字典优先级的排序(或者叫随机)进行删除并返回

update:和集合的update方法几乎一样,用另一个字典更新该字典

setdefault:添加元素,并可以设置一个默认值

但是如果在设定key时,其key已经存在字典的话,则会不变:

4.字典可以像列表使用索引一样访问+修改,但是字典使用的键,而非索引,字典没有索引

5.字典是可变对象,支持原处修改,也就是ID不变,相信也应该不用演示了

6.字典可以做变量解包:

但是元素个数必须对应,不然报错。

注意:字典的键必须是可哈希的值。

什么是可哈希,这里又得提到一个内置函数——hash()

【可哈希】你可以理解为可被作为依据查找,并且具有唯一对应的含义,因为字典里的键不可能对应多个值,反之一个值不能对应多个键的。而哈希函数就是判断此对象或者说此元素是否可哈希,如果不可哈希则会报错,上面的列表就是不可哈希,因为列表是可以原处修改的对象,比如,你今天介绍给一个人,后面你再去找他还钱,你发现他居然会易容术,你之前记住的他的样子已经不能帮助你找到他了,所以你的钱就找不回来了(比喻有些逻辑漏洞,理解原理就行。)。根据这个比喻,你应该知道能原处修改的对象作为键的话不可能有唯一对应的值了吧?所以列表是不能作为键,也就不可哈希,上面的报错就很好理解了。

而字典本身是不可哈希的,字典的键才是可哈希的。因为字典也支持原处修改

你应该要问,为什么字典的键必须得可哈希呢?

个人理解:开头提到的学生时代所用的字典,你在查一个字的时候,是需要得到它的读音或者偏旁部首,再按照字典前页的拼音表或者部首表来查跟着查,就能查到其字在哪,而这里的键就好比你知道的读音或者偏旁,用其来作为依据就会很快在字典的键里搜索这个键,然后立马返回这个键对应的值,而在大数据处理时,一般都是用字典再加上哈希算法来存储数据的,因为哈希算法可以高效快速的查找键所在位置,字典得到这个键再把对应的值反馈出来就行。它不像列表,元组那样,因为列表和元组是有序的,列表和元组默认的查找方式是从索引值为0开始查,换句话就是从头到尾开始查,当数据很大时,这样处理起来的速度是很慢的,用字典直接秒杀列表。

说个实际的例子,像百度等搜索引擎,其实就是用爬虫程序每天在不断爬网页,并结合一些叫清风算法之类的算法(做SEO的对这些应该很了解)存储关键字通过放在字典里并存在服务器里,然后当用户用关键词搜索内容时,百度搜索引擎就会很快有反应,把事先存放在字典里包含这个关键词所有相关的信息立马反馈给用户,这一两句话的过程,真正的实现其实大概就一眨眼的功夫(是不是有种感觉我在写小说 /手动滑稽),原理是这样的,其实搜索引擎当然不止像我说的这么简单,还有很多复杂的算法来结合实现,不然不可能达到这么快的速度的。好,不多说了。总之,你知道字典很强大就行了。

转载于:https://www.cnblogs.com/yangva/p/7616116.html

洗礼灵魂,修炼python(8)--高效的字典相关推荐

  1. 洗礼灵魂,修炼python(85)-- 知识拾遗篇 —— 深度剖析让人幽怨的编码

    编码 这篇博文的主题是,编码问题,老生常谈的问题了对吧?从我这一套的文章来看,前面已经提到好多次编码问题了,的确这个确实很重要,这可是难道了很多能人异士的,当你以为你学懂了,在研究爬虫时你发现你错了, ...

  2. python字典合并几种方式对比,Python合并两个字典的常用方法与效率比较

    本文实例讲述了Python合并两个字典的常用方法与效率比较.分享给大家供大家参考.具体分析如下: 下面的代码举例了5种合并两个字典的方法,并且做了个简单的性能测试 #!/usr/bin/python ...

  3. python json操作_4个小窍门,让你在Python中高效使用JSON

    字典和列表是 Python的两种数据类型,也是用来处理JSON的完美工具.本文将主要分享以下内容: 如何载入.编写JSON? 如何在命令行上优化.校验JSON? 如何通过使用JMESPath对JSON ...

  4. Python 将字符串转为字典

    引言 在工作中遇到一个小问题,需要将一个 Python 的字符串转为字典,比如字符串: user_info = '{"name" : "john", " ...

  5. python基础---元组、字典、函数、文件、异常

    文章目录 python基础---元组.字典.函数.文件.异常 Tuple(元组) 常用操作 dict(字典) 函数 文件 异常 python基础-元组.字典.函数.文件.异常 Tuple(元组) tu ...

  6. python合并两个字典的内容,使用update方法

    python合并两个字典的内容,使用update方法 update() 方法可使用一个字典所包含的键值对来更新己有的字典. 在执行 update() 方法时,如果被更新的字典中己包含对应的键值对,那么 ...

  7. python计算两个字典的相同点(从key、value、item角度)

    python计算两个字典的相同点(从key.value.item角度) 字典是由一个一个的 key-value 构成的,key 是找到数据的关键,Python 对字典的操作都是通过 key 来完成的. ...

  8. python自学多久可以找到工作-自学Python的高效方法,学Python多久能找到工作?

    原标题:自学Python的高效方法,学Python多久能找到工作? 相信有了解的人都知道,Python目前是首选的AI语言,在数据科学和AI中占据主导地位,而且随着互联网的发展,Python的应用越来 ...

  9. python中语法错误-python冒号语法错误python中如何创建字典

    python字典定义 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ...

最新文章

  1. 机器学习中qa测试_机器学习自动化单元测试平台
  2. pytorch之深入理解collate_fn
  3. 网络推广——网络推广专员面对网站收录异常要学会多角度分析
  4. js mysql java_Java、mysql、html、css、js 注释大小写
  5. 0127-python内置函数(一).abb
  6. 34. Leetcode 234. 回文链表 (链表-双指针)
  7. 命名对象实体对象_我的对象命名
  8. Arrays.sort()用来自定义排序的使用
  9. 北理计算机语言智能与社会计算,北京理工大学校长张军描绘智慧社会:人在思、云在算、端在造...
  10. C语言运算符:1.按位取反运算符 ~
  11. 如何学习渗透测试:初学者教程
  12. 完整的网站前端+源码模板
  13. cubeIDE快速开发流程
  14. 电子相册如何用c语言制作,电子相册怎样制作?
  15. iOS SafeArea安全区域
  16. 马化腾:电力时代孕育了计算机,人工智能兴盛于云计算
  17. numpy 求矩阵非零元素的均值
  18. 一期Go群问答-并发控制-数据竞争-错误与异常
  19. 为Fragment设置转场动画
  20. 【Tensorflow教程笔记】常用模块 tf.function :图执行模式

热门文章

  1. 首师大2计算机考研分数线,2021考研分数线:首都师范大学2021年考研复试分数线...
  2. 唯一可译码的判定方法matlab,用c++编写程序判定唯一可译码?
  3. 基于Spring Boot+Vue的考试系统
  4. python中扑克牌类设计_python中的图像界面设计(二)
  5. css过度效果 从无到有,求教,对于CSS3 transition和transform实现的一个特效原理不是太明白?...
  6. android 后台耗时,android教程之使用asynctask在后台运行耗时任务
  7. 好看的个人主页,个人引导页
  8. Linux安装mongodb数据库最新版(全网最细)
  9. Node.js读取mongoDB并输出json数据
  10. 详解rel=”nofollow”的用法与意义