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的更多相关文章

  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. PHP JSON数据 AJAX

    JSON数据的定义方式 //写入数据 var a = { code:"p001", name:"张三", shuzu:new Array(1,2,3,4), j ...

  2. 2-mybatis-启动

    启动相关的类主要位于session包下. 参照mybatis官方文档,从xml中构建SqlSessionFactory后,可以获取SqlSession,然后使用SqlSession查询数据库得到结果. ...

  3. SVN+MAVEN项目打包

    题记:项目打包bash脚本 环境准备 maven版本:3.5.2 mvn -v #查看maven的版本信息 svn版本:1.4.0 svn --version #查看svn版本信息 1.update_ ...

  4. druid连接池各属性说明

    转: druid连接池各属性说明 2018年10月17日 04:56:57 ht_kasi 阅读数:374   版权声明: https://blog.csdn.net/ht_kasi/article/ ...

  5. Ceph 的用户管理与认证

    目录 文章目录 目录 前言 Ceph 的用户管理 用户管理常规操作 CephX 认证系统 身份认证原理 使用 ceph-authtool 进行密钥环管理 注意事项 前言 常规的身份认证系统无非三点: ...

  6. Codeforces--C2. Good Numbers (hard version)

    题目链接http://codeforces.com/contest/1249/problem/C2.这是道进制转换题,我们的目的是找到最小的一个每个位都是1的三进制数来表示一个十进制数n.做法是,先将 ...

  7. 【转】Apache HBase 问题排查思路

    [From]https://www.itcodemonkey.com/article/9426.html HBCK - HBCK检查什么? (1)HBase Region一致性 集群中所有region ...

  8. markdown-博客编辑

    1. 快捷键 2. 基本语法 2.1 字体设置斜体.粗体.删除线 2.2 分级标题 2.3 链接 2.4 分割线 2.5 代码块 2.6 引用 2.7 列表 2.8 表格 3. 常用技巧 3.1 换行 ...

  9. Django视图之FBV与CBV

    一. CBV与FBV CBV:Class Based View FBV:Function Based View 我们之前写过的都是基于函数的view,就叫FBV.还可以把view写成基于类的,那就是C ...

  10. 测试工具/PostMan

    1.postman测试上传文件