zoukankan      html  css  js  c++  java
  • 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的时候才会去申请内存空间。 

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/noah0532/p/10989826.html
Copyright © 2011-2022 走看看