Python基础教程之dict和set
1. dict
Python中的dict等于js中的 map ,使用键-值(key-value)存储,具有极快的查找速度。
如果 我们要根据同学的姓名去查找他的成绩在不用dict的情况下。就需要两个list:
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
// 通过一个名字,去查找对应的位置,再从scores中取出对应的成绩
这样导致list的越来越长,速度越来越慢
// 如果通过dict实现,只需要“名字-成绩”就行,无论这个表多大,查找速度都不会变慢,如下:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
原理: 因为dict是通过索引去查找的而不是通过遍历的方式去找的。
// 除了初始化指定外,还可以通过key放入:
>>> d['Adam'] = 67
>>> d['Adam']
67
// 由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
>>> d['Jack'] = 90
>>> d['Jack']
90
>>> d['Jack'] = 88
>>> d['Jack']
88
如果key不存在,dict将会报错。 可以通过in判断key是否存在
或者通过get()方法
// in 方法
>>> 'Thomas' in d
False
// get() key不存在返回None
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
// 删除key 通过 pop()方法
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
注意点:
1. dict 内部存放的顺序和key的放入顺序没有关系
2. 和list比较
2.1 查找和插入速度极快,不会随着key的增加而变慢
2.2 需要占用大量的内存,内存浪费多
3. 和list相反
3.1 查找和插入时间随着元素的增加而增加
3.2 占用空间小,浪费内存少
4. dict是一种以空间换时间的方法
5. dict的key必须是不可变对象
6. 字符串和整数等不可变,可以作为key,而list的则不行。
2. set
和dict类似,但是不存储value,key不重复。创建set,需要提供一个list作为输入集合,如下:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
// 传入的参数[1, 2, 3]是一个list,而显示的{1, 2,
3}只是告诉你这个set内部有1,2,3这3个元素,
显示的顺序也不表示set是有序的
// set中重复将会被过滤
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}
// 通过add(key)可以向set中添加元素,可以重复添加但无效果
>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
// 通过remove(key)删除元素
>>> s.remove(4)
>>> s
{1, 2, 3}
set和dict的区别仅在于没有存储对应的value。
3. 不可变对象
对于可变对象,对它进行操作,对象本想将会变化
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
对于不可变对象,对象本身不会变化
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
Python基础教程之dict和set的更多相关文章
- Python基础教程之List对象 转
Python基础教程之List对象 时间:2014-01-19 来源:服务器之家 投稿:root 1.PyListObject对象typedef struct { PyObjec ...
- Python基础教程之udp和tcp协议介绍
Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...
- Python基础教程之第2章 列表和元组
D:\>python Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Typ ...
- python基础教程之pymongo库
1. 引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 1. 安装 pi ...
- Python基础教程之第5章 条件, 循环和其它语句
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 #Chapter 5 条件, 循环 ...
- Python基础教程之第3章 使用字符串
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "copyri ...
- Python基础教程之第1章 基础知识
#1.1 安装Python #1.1.1 Windows #1.1.2 Linux和UNIX #1.1.3 Macintosh #1.1.4 其它公布版 #1.1.5 时常关注.保持更新 #1.2 交 ...
- OpenVAS漏洞扫描基础教程之OpenVAS概述及安装及配置OpenVAS服务
OpenVAS漏洞扫描基础教程之OpenVAS概述及安装及配置OpenVAS服务 1. OpenVAS基础知识 OpenVAS(Open Vulnerability Assessment Sys ...
- python基础之字典dict和集合set
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...
随机推荐
- ant DatePicker 中文
方式一:局部设置 import 'moment/locale/zh-cn'; import locale from 'antd/lib/date-picker/locale/zh_CN'; //调用时 ...
- UI的流畅度优化
Android中所有的界面绘制工作都是在UI线程中进行的,提高UI流畅度的最核心根本在于释放UI线程.即:不在主线程中做耗时的操作. 很多人都知道,耗时的操作要放到子线程中去做,比如访问网络,比如读写 ...
- Popover 弹出框
基础用法 Popover 的属性与 Tooltip 很类似,它们都是基于Vue-popper开发的,因此对于重复属性,请参考 Tooltip 的文档,在此文档中不做详尽解释. 设置索引ref,在按钮中 ...
- [SQL]学习中遇到的错误
1.中英文模式切换 查找语句中不能出现中文字符!!!
- 前端之路(二)之JavaScript:菜鸟教程学习:http://www.runoob.com/js/js-intro.html
JavaScript 语句和 JavaScript 变量都对大小写敏感. 键值对通常写法为 name : value (键与值以冒号分割). 键值对在 JavaScript 对象通常称为 对象属性. ...
- VMWare虚拟机->锁定文件失败,打不开磁盘的解决办法
VMWare虚拟机提示:锁定文件失败,打不开磁盘的解决办法 如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提示:“锁定文件失败,打不开磁盘...或它所依赖的某个快照 ...
- 模拟窗口类ModelForm的应用
模拟窗口类ModelForm的应用 模拟窗口是Form的窗口中的fields是引用models类 不知道窗口类,点击:https://www.cnblogs.com/guguobao/p/932202 ...
- PJzhang:关闭wps小广告和快速关闭445端口
猫宁!!! kali linux上安装的wps,没有广告,而且轻巧简洁. 如果你在windows上安装wps,除了ppt.word.excel,还会有一个h5的应用,当然,最令人烦扰的当 ...
- Win10无线网络配置VMware的nat网络
1.在windows上用运行cmd,用ipconfig /all查看可用网络的dns服务器 2.配置VMnet8,其dns与本地的dns服务器相同 3.打开VMware Workstation 的编辑 ...
- git(程序员的时光机)
git 是什么 最强大的分布式版本控制系统,没有之一 版本控制: 完成一项任务,最终的成果可能是经过中间修修修改n次得到的,在这n个版本之间的切换就叫版本控制. 集中式的版本控制svn,cvs缺点: ...