美文网首页
【Python】07. dict 和 set

【Python】07. dict 和 set

作者: Raimond | 来源:发表于2017-11-04 16:15 被阅读0次

    使用 dict 和 set


    dict

    Python内置支持,全称 dictionary,在其它语言中也被称为 map, 使用键-值(key-value)存储,例如根据名字找到相关的成绩:

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
            >>> d['Michael']
            95

    当然上述的也可以使用两个 list,一个存名字,一个存成绩,然后通过相同的索引去查找,但是数据量越大越慢,相当于一本词典从头翻到尾只为找一个字。而反观 dict,它是通过 key 计算出 value 的内存地址来进行查找(哈希算法),相当于通过部首或拼音找字。

    特点:

    1. 查找速度快,且不随数据量增多而变慢,但是占用大量的内存(使用空间换取时间)
      (list就是数据越多越慢,但是占用空间小)
      2. 一个 key 只能对应一个 value,key 如果不存在则会报错
      3. dict 内部存放的顺序和 key 放入的顺序是没有任何关联的
      4. key 值必须是不可变对象

    如何判断 key 值不存在?

    法一
        使用 IN 判断,eg: 'Thomas' in d 看结果是否为 False
      法二
        使用 dict 提供的 get 方法,如果不存在可以返回 None(python 的交互命令行不会有任何显示),或者自己指定的 value。 eg:
            >>> d.get('Thomas')     
            >>> d.get('Thomas', -1)     
            -1

    删除 key

    要删除一个 key,用 pop(key)方法,其对应的 value 也会从 dict 中删除:
            >>> d.pop('Bob')
            75
            >>> d
            {'Michael': 95, 'Tracy': 85}


    set

    set 和 dict 类似,也是一组 key 的集合,只是不存储 value。要创建一个 set 需要提供一个 list 作为输入集合:
            >>> s = set([1, 2, 3])
            >>> s
            {1, 2, 3}
      注意
      1. 传入的参数 [1,2,3] 是一个 list,显示{1,2,3}只是告诉人们 set 的内部是有 1,2,3 这三个元素,显示顺序并不能证明 set 有序;
      2. set 中的 key 是不会有重复的,如果输入一个有重复元素的 list ,将会被自动去重;
      3. 与 dict 一样,不可放入可变对象,如果对象可变无法保证无重复元素;

    修改元素

    add(key) 添加元素(可以重复添加,但没有效果):
            >>> 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 可以看成是数学意义上无序和无重复元素的集合
            >>> s1 = set([1, 2, 3])
            >>> s2 = set([2, 3, 4])
            >>> s1 & s2
            {2, 3}
            >>> s1 | s2
            {1, 2, 3, 4}


    又议不可变对象

    str 是不可变对象。list 是可变对象,例如对其操作,它内部的内容是会改变的。

    >>> a = ['c', 'b', 'a']
            >>> a.sort()
            >>> a
            ['a', 'b', 'c']

    如果对不可变对象也进行操作呢?使用字符串的 replace() 方法:

    >>> a = 'abc'
            >>> a.replace('a', 'A')
            'Abc'
            >>> a
            'abc

    虽然时出现了 Abc,但是变量 a 最后仍然是 abc。如果第二句改一下就比较清楚了 b=a.replace('a', 'A'), 变的是变量,它指向的是字符串对象 'abc',而字符串对象一直没变,使用了 replace 相当于 Python 创建的一个新的字符串变量。


    超卡哇伊小姐姐镇

    相关文章

      网友评论

          本文标题:【Python】07. dict 和 set

          本文链接:https://www.haomeiwen.com/subject/znafmxtx.html