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

1.什么是字典

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

在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:清楚所有,和前一章集合方法一样,不再解析

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

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

get:根据给的键返回值

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

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

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

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

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

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

update:和字典雷同,用另一个字典更新该字典

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

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

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

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

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

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

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

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

可哈希你可以理解为可被作为依据查找,什么意思?就是判断此对象或者说此元素是否可哈希,如果不可哈希则会报错,上面的列表就是不可哈希,所以报错。

而字典本身是不可哈希的,字典的键才是可哈希的。

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

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

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

最新文章

  1. instanceof 运算符
  2. ajax基础1
  3. Window 对象详解 转自 http://blog.csdn.net/jcx5083761/article/details/41243697
  4. HDU 4770 Lights Against DudelyLights
  5. [外挂6]在指定位置下棋 SendMessage函数
  6. PHP 反射机制Reflection
  7. 基于百度地图js进行地理定位
  8. WPF 实现QQ抖动
  9. Activiti工作流学习-----基于5.19.0版本(5)
  10. iptabels 的一些配置
  11. 点评阿里JAVA手册之异常日志(异常处理 日志规约 )
  12. 从HTTL模板引擎看软件设计原则
  13. SQLserver 数据库高版本无法还原到低版本的数据解决方法
  14. (转)Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击想要查看的类或则方法
  15. Shell case
  16. mac的framework的路径
  17. mybatis作用、基本使用、小结
  18. ubuntu配置telnet服务
  19. 算法笔记_036:预排序(Java)
  20. 【Python学习笔记】Pandas库之DataFrame

热门文章

  1. Struts配置的各种视图转发类型
  2. 通俗易懂的Java序列化原理
  3. 使用Groovy处理SoapUI中Json response
  4. ==与equal
  5. Python验证码通过pytesser识别
  6. MyBatis框架——关系映射(一对多、多对多、多对一查询)
  7. 帆软的报表系统与泛微OA结合起来,这两个软件麦枫提供了经典的服务。
  8. JS判断当前使用设备是pc端还是web端(转MirageFireFox)
  9. nginx 安装和配置
  10. C++中关于重载默认构造函数与默认全部参数的构造函数的使用注意