洗礼灵魂,修炼python(8)--高效的字典
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开始查,换句话就是从头到尾开始查,当数据很大时,这样处理起来的速度是很慢的,用字典直接秒掉列表。
说个实际的例子,像百度等搜索引擎,其实就是用爬虫程序每天在不断爬网页,并用其算法存储关键字通过机制放在字典里,然后当用户用关键词搜索内容时,百度搜索引擎就会很快有反应,把事先存放在字典里包含这个关键词所有相关的信息立马反馈给用户,这一两句话的过程,真正的实现其实大概就一眨眼的功夫(是不是有种感觉在写小说 /手动滑稽),原理是这样的,其实搜索引擎当然不止像我说的这么简单,还有很多复杂的算法来结合实现,不然不可能达到这么快的速度的。好,不多说了。总之,你知道字典很强大就行了。
洗礼灵魂,修炼python(8)--高效的字典的更多相关文章
- 洗礼灵魂,修炼python(85)-- 知识拾遗篇 —— 深度剖析让人幽怨的编码
编码 这篇博文的主题是,编码问题,老生常谈的问题了对吧?从我这一套的文章来看,前面已经提到好多次编码问题了,的确这个确实很重要,这可是难道了很多能人异士的,当你以为你学懂了,在研究爬虫时你发现你错了, ...
- 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块
feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...
- Python基础知识(五)------字典
Python基础知识(四)------字典 字典 一丶什么是字典 dict关键字 , 以 {} 表示, 以key:value形式保存数据 ,每个逗号分隔 键: 必须是可哈希,(不可变的数据类型 ...
- Python 优雅的操作字典【转】
Python 中的字典是Python中一个键值映射的数据结构,下面介绍一下如何优雅的操作字典. 1.1 创建字典 Python有两种方法可以创建字典,第一种是使用花括号,另一种是使用内建 函数dict ...
- 初学Python(三)——字典
初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:" ...
- python编程基础知识—字典
字典 在python中,字典是一系列键-值对,每个键都与一个值相关联,可使用键来访问相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典,即可将任何python对象用在字典中的值. 在pytho ...
- python调用数据返回字典dict数据的现象2
python调用数据返回字典dict数据的现象2 思考: 话题1连接:https://www.cnblogs.com/zwgbk/p/10248479.html在打印和添加时候加上内存地址id(),可 ...
- python调用数据返回字典dict数据的现象1
python调用数据返回字典dict数据的现象1 思考: 可以看到这两种情况,区别在于构造函数make()里赋值给字典dict的方式不同.使用相同的调用方式,而结果却完全不同.可以看到第二种情况才是我 ...
- python基本数据类型之字典
python基本数据类型之字典 python中的字典是以键(key)值(value)对的形式储存数据,基本形式如下: d = {'Bart': 95, 'Michael': 34, 'Lisa': 5 ...
随机推荐
- 高级java高并发,高性能,分布式,高可用,负载均衡,系统架构实战
java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战 视频课程包含: ...
- sql执行机制
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp38 sql执行机制 1.对于普通的sql语句只有where条件的执行机制 ...
- 【DDD】领域驱动设计实践 —— 限界上下文识别
本文从战略层面街上DDD中关于限界上下文的相关知识,并以ECO系统为例子,介绍如何识别上下文.限界上下文(Bounded Context)定义了每个模型的应用范围,在每个Bounded Context ...
- 小程序脚本语言WXS详解
WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...
- 探索JSP中的 "9大内置对象!"
1.什么是JSP内置对象? jsp内置对象就是Web容器创建的一组对象,我们都知道Tomcat可以看成是一种Web容器,所以我们可以知道所谓的内置对象Tomcat创建的,使用内置对象时可以不适用new ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战1
环境准备: 全局安装jade: npm install jade -g 初始化项目package.json: npm init --yes 安装完成之后,可以使用 jade --help 查看jade ...
- 201521123008《Java程序设计》第二周实验总结
本周学习总结 ① 数据类型,其中char是占用两个字节的内存空间,其他和以前学过的一样.除了十进制位,整型也可以用八进制或者十六进制表示.浮点型不精确. ②运算符,算术,赋值,逻辑,位运算. ③str ...
- 201521123060《Java程序设计》第1周学习总结
1. 本章学习总结 认识和了解了Java的发展进程: 了解了相关开发工具: 认识了JVM,JRE,JDK: 2. 书面作业 Q1.为什么java程序可以跨平台运行?执行java程序的步骤是什么?(请用 ...
- 201521123005 《Java程序设计》 第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...
- Java课程设计——计算器
1.团队课程设计博客链接 http://www.cnblogs.com/yuanj/p/7072137.html 2.个人负责模块或任务说明 确定课题并进行任务分工 编写计算器删除,清零,清空,小数点 ...