【Python自学】07. dict 和 set

来源:互联网 发布:广场舞真皮舞鞋淘宝网 编辑:程序博客网 时间:2024/05/20 19:16

使用 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 创建的一个新的字符串变量。


        一眼恋爱