美文网首页
python中的dict和set

python中的dict和set

作者: 舒小贱 | 来源:发表于2017-12-15 16:39 被阅读0次
    一:字典dict

    python中的dict和golang中map的概念是一致的,称为“字典”。

    d = {'minping':99, 'shuxin':98}
    print(d)
    print(d["minping"]) 
    print(d["minping11"]) 直接报错:KeyError: 'minping1'
    print(d.get("minping1"))
    d.pop("minping")
    print(d)
    

    dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

    这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

    要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

    >>> key = [1, 2, 3]
    >>> d[key] = 'a list'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    
    二:集合set

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key(如果在初始化或者add过程中有的话,也会剔除掉重复的元素)
    要创建一个set,需要提供一个list作为输入集合:

    s = set([1,1,1,2,3,2])
    print(s)
    s.add(4)
    s.add(-1)
    print(s)
    s.remove(3)
    print(s)
    s.remove(-2)
    print(s)
    

    运行结果:

    E:\python_study>python 1.py
    set([1, 2, 3])
    set([1, 2, 3, 4, -1])
    set([1, 2, 4, -1])
    Traceback (most recent call last):
      File "1.py", line 115, in <module>
        s.remove(-2)
    KeyError: -2
    

    从上可见,set有add和remove操作来增加删除元素,但是删除时如果key不存在,则直接报错。
    从这里面来看,set好像也没有什么特点,那没为什么把set写在这篇文章里?如果你这样看待set那就大错特错了,set的功能远不止这些:set是作为set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作

    s1 = set([1,2,3])
    s2 = set([2,3,4])
    
    print(s1 & s2) #交集
    print(s1 | s2) #并集
    print(s1 - s2) #差集
    

    运行结果:

    E:\python_study>python 1.py
    set([2, 3])
    set([1, 2, 3, 4])
    set([1])
    

    所以说用pyhton的set进行一些小计算是不是很方便!

    相关文章

      网友评论

          本文标题:python中的dict和set

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