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*) my_dict = Mydict(one=)
my_dict["one"] =
print(my_dict)
# 建议用UserDict
from collections import UserDict class Mydict(UserDict):
def __setitem__(self,key,value):
super().__setitem__(key,value*) my_dict = Mydict(one=)
print(my_dict)
from collections import defaultdict

class Mydict(UserDict):
def __setitem__(self,key,value):
super().__setitem__(key,value*) my_dict = Mydict(one=)
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的时候才会去申请内存空间。

Python说文解字_杂谈07的更多相关文章

  1. Python说文解字_杂谈05

    1. isinstance和type: is和==符号,is指的是内存地址,是不是一个对象,ID知否相同 集成链 class A: pass class B(A): pass b = B() prin ...

  2. Python说文解字_杂谈09

    1. 元类编程代码分析: import numbers class Field: pass class IntField(Field): # 数据描述符: # 初始化 def __init__(sel ...

  3. Python说文解字_杂谈08

    1. Python变量到底是什么? Python和Java中的变量本质不一样,python的变量实质是一个指针 int str,便利贴 a = 1 # 1. a贴在1上面 # 2. 它的过程是先生成对 ...

  4. Python说文解字_杂谈01

    1. Python在Ubuntu下面下载Python 2. 安装依赖包 sudo apt-get update sudo apt-get install build-essential python- ...

  5. Python说文解字_杂谈06

    1. 序列类型的分类: 容器类型:list.tuple,deque 扁平序列:str.bytes.bytearray.array.array 可变序列:list.dequte.bytearray.ar ...

  6. Python说文解字_杂谈04

    1. 鸭子类型: 当你看到一只鸟走来像鸭子,游泳起来像鸭子,叫起来也像鸭子,他么他就可以叫做鸭子.任何可迭代的对象.一样的方法,可以用可迭代的话,就可以迭代的组合打印.__getitem__可以塞到任 ...

  7. Python说文解字_杂谈03

    1. 我们从前面的知识得到,所有的类都要继承自object这个基类(超类),另外我们知道“继承”可以继承类的属性和方法.我们起始通过type创建类的时候,自然而然的也会从ojbect继承他的一些属性和 ...

  8. Python说文解字_杂谈02

    1. Py中三个中啊哟的概念type.object和class的关系. type生成了int生成了1 type->class->obj type用来生成类对象的 object是最顶层的基类 ...

  9. Python说文解字_详解元类

    1.深入理解一切接对象: 1.1 什么是类和对象? 首先明白元类之前要明白什么叫做类.类是面向对象object oriented programming的重要概念.在面向对象中类和对象是最基本的两个概 ...

随机推荐

  1. HihoCoder第十一周:树中的最长路

    #1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中, ...

  2. 小程序地图开发周边信息POI展示为列表

    ##首先附上效果图 在我前面的文章中我详述过如何使用百度地图API来开发小程序的地图,所以这里面就不说基础内容了. 直说如下: ##1.如何获取列表: //分类存储 makertap: functio ...

  3. windows中git输错密码后不能修改问题

    坑位 当使用git做代码管理的时候,如果仓库地址地选用的是https,在初始拉取代码时,需要输入账号和密码,如果不小心输错了,后续一直会验证失败,无法再重新更正账号信息 Why 因为git为了不让你每 ...

  4. Swift泛型定义 同时限定T的类(class)和多协议(protocol)

    https://blog.csdn.net/weixin_34054931/article/details/88027728 swift 可以定义模板函数,如: func testFunc<T& ...

  5. 报错SQL盲注之BIGINT 溢出

    首先感谢原创博主,在此致敬.本文转自:http://www.cnblogs.com/lcamry/articles/5509112.html MySQL版本在 5.5.5 及其以上 0x01 概述 我 ...

  6. hdu 1671 Phone List 统计前缀次数

    Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. 前端基础之AJAX

    AJAX 什么是AJAX,简单来说就是利用JavaScript天生异步的特性,使用异步请求后台数据,从而达到不刷新网页也能局部更新页面的效果. 原生AJAX JavaScript中的AJAX依赖于XM ...

  8. js库链接

    1.autoHeightTextarea自适应高度的textarea是一款jquery插件,支持链式调用,支持设置最小行数.最小高度.最大行数和最大高度,在输入文字的时候实现textarea的高度自适 ...

  9. hibernate.hbm.xml必须必须配置主键

    hibernate.hbm.xml必须必须配置主键 <id name="XXid" type="java.lang.long" column=" ...

  10. swiper实现匀速无缝滚动

    设置属性 speed:2500,//匀速时间 autoplay: { delay: 0, stopOnLastSlide: false, disableOnInteraction: true, }, ...