dict  -- dictionary
    一组key的集合,包含key与value的对应。   
    Python内置的字典,在其他语言中称为map,使用key-value存储,具有极快的查找速度。
和list比较,dict的特点:
    dict的查找和插入速度极快,不会随着key的增加而变慢。
    dict需要占用大量的内存,内存浪费多。
    list的查找和插入时间随着元素的增加而增加。
    list占用空间小,浪费内存很少。
dict是一种用内存空间换取运行时间的一种方法
    dict可以用在需要高速查找的地方,几乎无处不在。
dict的key必须是不可变对象,因为dict根据key来计算value的存储位置,如果key变化了,那么value存储位置就不同,dict内部就混乱了。通过key计算位置的算法成为Hash。
要保证Hash的正确性,作为key的对象就不能变化。字符串、整数等都是不可变对象,而list是可变的,所以list不能作为key。    
简单介绍一下dict:   
        成绩对照表
        可以使用两个list来完成,如:
            names = ['Alias','Billy','David']
            scores = [90,60,75]
        给定名字后,根据名字在list的位置,再去另一个list中的对应位置取出元素,得到成绩。 list越长,耗时越多。
       
        使用dict来实现,如:
            result = { 'Alias':97,'Billy':60,'David',75 }
            result[ 'Alias' ]
        这种方式,key和value是一一对应的,存放数据时,必须根据key算出value的存放位置,这样在取值时才会根据key直接拿到value. 一个key只能对应一个值,如果一个dict中有两个key相同时(一个key出现两次), 后出现的key的值会覆盖之前出现的相同key的值.
       
    ##dict中存放key的顺序与录入顺序无关。
   
将数据存入dict
    1.初始化放入
        result = { 'a':20 , 'b':30, 'c':40 }
    2.通过key放入
        result['abc'] = 12
       
    ##如果key不存在,在调用时会报错。
1.通过 in 来判断key是否存在。
            'abcd' in result
        2.通过get()来获取key对应的值,如果key不存在, 则返回None
            可如果key不存在,返回None, 或者为不存在的情况指定返回的value。
            如:
                co = { 'Alias':1 , 'Billy':2 , 'Cyndi':3 }
                co.get('David')
                co.get( 'David' , 4 )
从dict中删除
    pop()
        co.pop('Alias')
        如果不指定pop()中的key ,会报错。 这一点与list不同,list会删除掉最后一个元素。

set
和dict类似,也是一组key的集合,但是不存储value。由于key不能重复,set中没有重复的key。
创建一个set
    创建set需要提供一个list作为输入集合。
    s = set( [1,2,3,4] )
    或
    li = [1,2,3,4]
    s = set( li )
   
    set内的list中的元素顺序不表示set是有序的。
    重复元素会被自动过滤。   
添加元素到set中
    add()
    s.add('a')
   
    list不能作为元素添加到set,会报错。因为list是可变对象。set与dict都不支持将可变对象作为key。
   
删除set中的元素
    remove()
    s.remove(4)
   
    一次只能remove一个元素。
   
set可以看做是一个数学意义上的集合,因此多个set之间可以做数学意义上的交集并集操作。
    >>> s1 = set( [1,2,4,8,10,28] )
    >>> s2 = set( [2,4,6,8,10,12] )
    >>> s1 & s2
    {8, 2, 10, 4}       #交集
    >>> s1 | s2
    {1, 2, 4, 6, 8, 10, 12, 28}     #并集
不可变对象
在此先引入一个新函数 replace()
    a='abc'
    a.replace('a','A')
   
之前例子里讲,str、int等类型数据都是不可变对象,那么,如果对这些不可变对象进行replace操作,这些对象是不是已经不再“不可变”了呢?
>>> a = 'abc'
            >>> a.replace('a','BBBBBB')
            'BBBBBBbc'
    实际上, replace之后,再进行print(a) ,会发现 对象(变量)a的值依然是 abc,也就是说,对象a实际上也是一个变量,只不过对象a指向的内容才是str 'abc' , replace之后实际上是新建了一个新的变量,可以通过下面的逻辑来解释这个现象:
>>> a ='abc'
            >>> print(a)
            abc
            >>> b = a.replace('a','HHHHH')
            >>> print(b)
            HHHHHbc
            >>> print(a)
            abc
    所以,对于不可变对象来说,调用对象的任意方法都不会改变对该对象自身的内容,仅仅会创建新的对象并返回,这样就保证了不可变对象本身是永远不可变的。

转载于:https://www.cnblogs.com/konggg/p/8973893.html

Day4 dict和set相关推荐

  1. Python基础day4 函数对象、生成器 、装饰器、迭代器、闭包函数

    一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松 ...

  2. python之路day4_【Python之路Day4】基础篇

    今日目录: 1. Python内置函数 2. 装饰器 一. Python内置函数 内置函数主要是使用比较频繁的或者是元操作,所以Python通过内置函数的方式提供给开发者,如下表: 下面现阶段只介绍一 ...

  3. Python廖雪峰教程学习笔记:Day4

    前言 养成一个好的习惯只需要坚持21天,Day4 函数 编程中,函数的调用.定义在一定程度上可以简化功能的实现,降低程序的复杂度. 调用函数 Python中内置了许多有用的函数,我们在调用一个内置函数 ...

  4. day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器

    一.函数即变量 1.赋值效果图 a = 1  b = a def func(): print('hello') func 是函数名,相当于变量名,print('hello')是函数体,相当于变量的值, ...

  5. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1. ...

  6. 关于python中的dict和defaultdict

    dict 在Python中如果访问字典中不存在的键,会引发KeyError异常,所以一般当我们比如统计一句话的词频时候,我们总是使用这样的处理方式: strings = ('puppy', 'kitt ...

  7. AttributeError: 'dict' object has no attribute 'status_code'

    前端AJAX请求数据,提示错误:"AttributeError: 'dict' object has no attribute 'status_code'". 原因:是提示返回对象 ...

  8. Python3中对Dict的内存优化

    众所周知,python3.6这个版本对dict的实现是做了较大优化的,特别是在内存使用率方面,因此我觉得有必要研究一下最新的dict的源码实现. 前后断断续续看了大概一周多一点,主要在研究dict和创 ...

  9. python最新版本 效率_Python:迭代列表与dict项目效率

    这取决于您使用的是哪个版本的Python.在Python 2中,some_dict.items()创建一个新列表,这会占用一些额外的时间并占用额外的内存.另一方面,一旦创建了列表,它就是一个列表,因此 ...

最新文章

  1. 应该使用c# 预定义类型 还是绝对不要使用预定义类型。
  2. 深入学习Redis持久化
  3. SSE图像算法优化系列八:自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。...
  4. 后台开发经典书籍--Redis深度历险:核心原理和应用实践
  5. postman添加cookie
  6. 搭建rtmp推流服务器
  7. apollo代码修改配置_灰度实战(四):Apollo配置中心(4)
  8. word中公式和文字不在一条水平线上
  9. 请教:使用或移植过xprivacy的请进
  10. C语言有四种基本常量,第2章-C语言的基础知识.ppt
  11. QTREE系列1,4,5,6,7 LCT
  12. Cython的学习方法
  13. Go语言和Java、python等其他语言的对比分析
  14. Windows驱动_WSK驱动之一WSK是什么
  15. 软件安装管家公众号的部分链接
  16. .net 发送电邮_关于如何使用.NET发送电子邮件的快速参考
  17. java.io.IOException: Response data error, expect Throwable, but get null
  18. 1014: 统计患病人数
  19. pyqt5 桌面摸鱼工具 一行小鱼
  20. 软件设计师知识点拿分

热门文章

  1. django的模板系统过滤器笔记
  2. [零基础学JAVA]Java SE面向对象部分-17.面向对象高级(05)
  3. Python基础知识(3)
  4. 您知道您客户的数据价值几何吗?
  5. 怎么灵活使用Graph, Document, Key/Value 三种混合模型的数据库?--Java 10分钟教程
  6. 删除顽固文件的执行代码,删除rhsa属性文件,删除服务器中黑客留下...
  7. 〖Android〗屏幕触屏事件录制与回放
  8. DTCoreText
  9. android中的资源文件
  10. C++ STL学习笔记(5) Vector容器, array容器,deque容器