• Python说文解字_杂谈07


     1. 深入dict

    from collections.abc import Mapping,MutableMapping
    # dict 属于mapping类型
    
    a = {}
    print(isinstance(a,MutableMapping))

    2.常用方法:

    a = {"bobby1":{"company":"imooc"},
         "bobby2:":{"company":"imooc"}}
    
    # clear
    # a.clear()
    
    #copy,返回浅拷贝
    # new_dict = a.copy()
    # new_dict["bobby1"]["company"] = "imooc3"
    
    # 深拷贝
    # import copy
    # new_dict = copy.deepcopy(a)
    # new_dict["bobby1"]["company"] = "imooc3"
    
    # fromkeys
    new_list = ["bobby1","bobby2"]
    new_dict = dict.fromkeys(new_list,{"company":"imooc"})
    
    # get
    # value = new_dict.get("bobby",{})
    # print(value)
    
    #items
    # for key,value in new_dict.items():
    #     print(key,value)
    
    # setdefault
    # 他对去调用D.get(k,d)同时D[k] 设置
    default_value = new_dict.setdefault("bobby","imooc")
    print(new_dict)
    
    # update:
    new_dict.update(bobby="imooc")
    new_dict.update([("bobby","imooc")])
    new_dict.update((("bobby","imooc"),))

    3. dict的子类

    # 不建议继承list和dict
    class Mydict(dict):
        def __setitem__(self,key,value):
            super().__setitem__(key,value*2)
    
    my_dict = Mydict(one=1)
    my_dict["one"] = 1
    print(my_dict)
    # 建议用UserDict
    from collections import UserDict
    
    class Mydict(UserDict):
        def __setitem__(self,key,value):
            super().__setitem__(key,value*2)
    
    my_dict = Mydict(one=1)
    print(my_dict)
    from collections import defaultdict
    
    class Mydict(UserDict):
        def __setitem__(self,key,value):
            super().__setitem__(key,value*2)
    
    my_dict = Mydict(one=1)
    print(my_dict)
    
    my_dict = defaultdict(dict)
    my_value = my_dict["bobby"]
    
    # __missing__方法,如果找不到某个key,那么实现一个keyvalue

      记住:其实setdefault里面实现了__missing__魔法函数,表示如果是找不到某个key,那么实现一个默认的keyvalue

    3. set和frozenset

    # set   集合  frozenset   不可变集合   无序  不重复
    s = set('abcde')
    s = set(['a','b','c'])
    print(s)
    
    # 初始化方法
    s = {'a','b'}
    print(type(s))
    
    
    s2 = frozenset('abcde') # 不可变的类型,可以作为dict的key
    print(s2)

      记住:和数学的操作一样,差集,交集,并集等。。

      记住:在去重上应用很高,性能很高。

      记住:还可以用:

    for "c" in set:
        print ("i am in set")

      记住:这里就实现了__contain__方法

      记住:还有实现了__issubset__方法

    4. dict和set他们背后实现的原理:

      1. dict的key或者set的值都是必须可以hash的,不可变对象都是可以hash的,str,fronzenset,tuple,自己实现的类的__hash__

      2. dict的内存花销大,但是查询速度快,自定义的对象或者Python内部的对象都使用dict包装的。

      3.dict的存储顺序和元素添加顺序有关。

      4.添加数据有可能改变已有数据的顺序。

      5.list和array是一种自增的方式,随着数据在增加,申请内存空间的动作不断操作。

      6.dict只有在内存空间少于1/3的时候才会去申请内存空间。 

  • 相关阅读:
    检测c/c++中内存泄露
    在一个集合S中寻找最大的C使A+B=C且A,B,C均在集合当中
    《为学》
    U盘windows无法格式化的解决办法
    java.lang.AbstractMethodError: oracle.jdbc.driver...解决方法
    sqlplus连接远程Oracle
    oracle字符集导致的乱码问题
    大端与小端存储模式详解
    《劝学》原文
    《报任安书》司马迁
  • 原文地址:https://www.cnblogs.com/noah0532/p/10989826.html
Copyright © 2020-2023  润新知