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
    所以,对于不可变对象来说,调用对象的任意方法都不会改变对该对象自身的内容,仅仅会创建新的对象并返回,这样就保证了不可变对象本身是永远不可变的。
 

Day4 dict和set的更多相关文章

  1. day4:Python列表(list)元组( tuple)字典(dict)

    列表----list 列表:中括号,每个元素用‘,’分割,列表里面也可以嵌套列表,列表里面可以包含数字,字符串,布尔值等,也就是元素的集合 例:test = [2,4,'sun','yao'] #索引 ...

  2. day4(dict和set)

    dict 内置字典,使用key-value存储,具有极快的查找速度. >>>d = {'michael': 95, 'bob': 75, 'tracy': 85} >>& ...

  3. Python之路,Day4 - Python基础4 (new版)

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

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

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

  5. 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...

  6. python day4 元组/字典/集合类知识点补充

    目录 python day4 元组/字典/集合类知识点补充 1. 元组tuple知识点补充 2. 字典dict的知识点补充 3. 基本数据类型set 4. 三元运算,又叫三目运算 5. 深复制浅复制 ...

  7. tuple放入dict中

    tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...

  8. redis数据结构存储Dict设计细节(redis的设计与实现笔记)

    说到redis的Dict(字典),虽说算法上跟市面上一般的Dict实现没有什么区别,但是redis的Dict有2个特殊的地方那就是它的rehash(重新散列)和它的字典节点单向链表. 以下是dict用 ...

  9. python list dict 去重的两种方式

    def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...

随机推荐

  1. 使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据

    1 # 使用requests请求网页,爬取网页的内容 2 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据 4 5 import requests 6 from mu ...

  2. python程序基础

    高级程序设计语言包括Python.C/C++.Java等 低级程序设计语言包括汇编语言和机器语言   Python是一种解释型语言,但为了提高运行效率,Python程序在 执行一次之后会自动生成扩展名 ...

  3. Mesos Marathon能做什么?理念是什么?(转)

    Mesos功能和特点? Mesos是如何实现整个数据中心统一管理的呢?核心的概念就是资源两级供给和作业两级调度.先说说从下而上的资源两级供给吧. 在Mesos集群中,资源的供应方都来自Mesos Sl ...

  4. Integer 错误的加锁

    多线程同时访问一个Integer加锁的问题,程序运行和想要的结果相差甚远,让我百思不得其解,就下来研究了一下: 在进行多线程同步时,加锁是保证线程安全的重要手段之一.synchronized是大多数程 ...

  5. Mysql binlog备份数据及恢复数据,学会这个,我在也不怕删库跑路啦~

    导读 我一直都主张,技多不压身(没有学不会的技术,只有不学习的人),多学一项技能,未来就少求人一次.网上经常听到xxx删库跑路,万一真的遇到了,相信通过今天的学习,也能将数据再恢复回来~~~ 当然啦, ...

  6. 思维导图VS金字塔原理

    作为常识,思维导图制作的核心元素是关键词,而金字塔原理制作的核心元素则是拓展的概要句子,这两种方式是当今人们常用的思维工具,本文对其做了对比,希望对你的选择有所帮助. 金字塔原理结构:从上到下三角形结 ...

  7. 如何用ABBYY解决文档图像存在缺陷,OCR 准确性低的问题

    扭曲的文本行.歪斜.噪声及扫描图像和数码照片中常见的其他缺陷可能会降低识别质量.ABBYY FineReader,提供各种 自动和手动工具去除这些缺陷. 如何手动编辑图像 如果您禁用了自动预处理功能或 ...

  8. Mac磁盘清理工具——CleanMyMac

    许多刚从Windows系统转向Mac系统怀抱的用户,一开始难免不习惯,因为Mac系统没有像Windows一样的C盘.D盘,分盘分区明显.因此这也带来了一些问题,关于Mac的磁盘的清理问题,怎么进行清理 ...

  9. 如何在PDF文档上加水印

    当我们需要传输一些比较重要的文件时,往往会选择将文档转换为PDF文件,避免其他人复制.更改文档的内容. pdfFactory不仅可以为用户提供快速创建PDF的功能,同时还提供了添加水印的功能.有了水印 ...

  10. 3种终极方法,彻底解决CDR不显示缩略图!

    站长所在的印刷出版行业,一般都是使用版本较低的CDR软件,以便更好的兼容出版厂,不然新版本的文件发厂出片时却打不开,而转低版本的话又容易出错.从最开始的 CorelDRAW 9 到现在的 CORELD ...