1. dict

Python中的dict等于js中的 map ,使用键-值(key-value)存储,具有极快的查找速度。

如果 我们要根据同学的姓名去查找他的成绩在不用dict的情况下。就需要两个list:

  1. names = ['Michael', 'Bob', 'Tracy']
  2. scores = [95, 75, 85]
  3. // 通过一个名字,去查找对应的位置,再从scores中取出对应的成绩
  4. 这样导致list的越来越长,速度越来越慢
  5. // 如果通过dict实现,只需要“名字-成绩”就行,无论这个表多大,查找速度都不会变慢,如下:
  6. >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
  7. >>> d['Michael']
  8. 95

原理: 因为dict是通过索引去查找的而不是通过遍历的方式去找的。

  1. // 除了初始化指定外,还可以通过key放入:
  2. >>> d['Adam'] = 67
  3. >>> d['Adam']
  4. 67
  5. // 由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
  6. >>> d['Jack'] = 90
  7. >>> d['Jack']
  8. 90
  9. >>> d['Jack'] = 88
  10. >>> d['Jack']
  11. 88

如果key不存在,dict将会报错。 可以通过in判断key是否存在

或者通过get()方法

  1. // in 方法
  2. >>> 'Thomas' in d
  3. False
  4. // get() key不存在返回None
  5. >>> d.get('Thomas')
  6. >>> d.get('Thomas', -1)
  7. -1
  8. // 删除key 通过 pop()方法
  9. >>> d.pop('Bob')
  10. 75
  11. >>> d
  12. {'Michael': 95, 'Tracy': 85}

注意点:

  1. 1. dict 内部存放的顺序和key的放入顺序没有关系
  2. 2. list比较
  3. 2.1 查找和插入速度极快,不会随着key的增加而变慢
  4. 2.2 需要占用大量的内存,内存浪费多
  5. 3. list相反
  6. 3.1 查找和插入时间随着元素的增加而增加
  7. 3.2 占用空间小,浪费内存少
  8. 4. dict是一种以空间换时间的方法
  9. 5. dictkey必须是不可变对象
  10. 6. 字符串和整数等不可变,可以作为key,而list的则不行。

2. set

和dict类似,但是不存储value,key不重复。创建set,需要提供一个list作为输入集合,如下:

  1. >>> s = set([1, 2, 3])
  2. >>> s
  3. {1, 2, 3}
  4. // 传入的参数[1, 2, 3]是一个list,而显示的{1, 2,
  5. 3}只是告诉你这个set内部有1233个元素,
  6. 显示的顺序也不表示set是有序的
  7. // set中重复将会被过滤
  8. >>> s = set([1, 1, 2, 2, 3, 3])
  9. >>> s
  10. {1, 2, 3}
  11. // 通过add(key)可以向set中添加元素,可以重复添加但无效果
  12. >>> s.add(4)
  13. >>> s
  14. {1, 2, 3, 4}
  15. >>> s.add(4)
  16. >>> s
  17. {1, 2, 3, 4}
  18. // 通过remove(key)删除元素
  19. >>> s.remove(4)
  20. >>> s
  21. {1, 2, 3}

set和dict的区别仅在于没有存储对应的value。

3. 不可变对象

对于可变对象,对它进行操作,对象本想将会变化

  1. >>> a = ['c', 'b', 'a']
  2. >>> a.sort()
  3. >>> a
  4. ['a', 'b', 'c']

对于不可变对象,对象本身不会变化

  1. >>> a = 'abc'
  2. >>> a.replace('a', 'A')
  3. 'Abc'
  4. >>> a
  5. 'abc'

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

Python基础教程之dict和set的更多相关文章

  1. Python基础教程之List对象 转

    Python基础教程之List对象 时间:2014-01-19    来源:服务器之家    投稿:root   1.PyListObject对象typedef struct {    PyObjec ...

  2. Python基础教程之udp和tcp协议介绍

    Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...

  3. Python基础教程之第2章 列表和元组

    D:\>python Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Typ ...

  4. python基础教程之pymongo库

    1. 引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 1.  安装 pi ...

  5. Python基础教程之第5章 条件, 循环和其它语句

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 #Chapter 5 条件, 循环 ...

  6. Python基础教程之第3章 使用字符串

    Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "copyri ...

  7. 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 交 ...

  8. OpenVAS漏洞扫描基础教程之OpenVAS概述及安装及配置OpenVAS服务

    OpenVAS漏洞扫描基础教程之OpenVAS概述及安装及配置OpenVAS服务   1.  OpenVAS基础知识 OpenVAS(Open Vulnerability Assessment Sys ...

  9. python基础之字典dict和集合set

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...

随机推荐

  1. Java-GC 垃圾收集器(HotSpot)

    垃圾收集器为垃圾收集算法的具体实现,是执行垃圾收集算法的,是守护线程. HotSpot 虚拟机采用分代收集(JVM 规范并未对堆区进行划分),将堆分为年轻代和老年代,垃圾收集器也按照这样区分.不过已有 ...

  2. 让SpringBoot工程支持热部署

    下载地址:https://files.cnblogs.com/files/xiandedanteng/SpringBootWeb-1_20190928.rar 修改Java文件后,每次要重启才好用,修 ...

  3. git远程删除分支后,本地执行git branch -a依然能看到删除分支到底该咋整?

    使用命令git branch -a可以查看所有本地分支和远程分支(git branch -r 可以只查看远程分支) 如果发现很多在远程仓库已经删除的分支在本地依然可以看到到底该怎么办呢?(反正强迫症受 ...

  4. IIS asp.net 中出现未能加载文件或程序集“System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。

    分析器错误消息: 未能加载文件或程序集“System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或 ...

  5. MySQL如何查询某个字段长度最大的记录

    转: MySQL如何查询某个字段长度最大的记录 2017年06月24日 13:12:15 翔云123456 阅读数 18348   版权声明:本文为翔云原创文章,未经博主允许不得转载. https:/ ...

  6. linux性能监控 + Sendmail 发邮件

    sendmail安装 #!/bin/bash#控制发邮件的阈值是在rate,rate1和FF值(三个同样的用途,仅仅是名字不同)##注:该博文中的变量不规范,我是随意定义的,请注意##定义时间倒计时函 ...

  7. 热门搜索词获取java版

    日常生活中经常会有这样的需求,就是网站上.app上需要展示近期热搜的一些词汇,其实常用的做法当然是自己写爬虫去爬,不过这种办法是在太麻烦了,为了节省时间,可以调用一些接口来实现,比如常用的聚合数据,小 ...

  8. 七十:flask钩子函数之关于before_request的钩子函数

    在flask中钩子函数是使用特定的装饰器装饰的函数,用于在正常执行的代码中,插入一段自己想要执行的代码(hook) before_first_request:flask项目第一次部署后指向的钩子函数, ...

  9. 五十四:WTForms表单验证之自定义表单验证器

    如果想要对表单中的某个字段进行自定义验证,则需要对这个字段进行单独的验证1.定义一个方法,命名规则为:validate_字段名(self, filed)2.在方法中,使用filed.data获取字段的 ...

  10. Eclipse使用git发布项目到github

    因为一直都在使用svn,今天尝试了下git,记录下来既是方便自己以后查看,也是分享一些经验! 废话不多说,撸起袖子就是干!!! 1.选中要上传的项目右键 2.选中git 3.在图上打钩,点击所要上传的 ...