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. P30 Pro劲敌!DxO官宣新机:排行榜又要变

    均为111分,接着是华为Mate 20 Pro.P20 Pro和三星Galaxy S10+,三款机型综合得分均为109分,前10名最后三款机型分别是小米9.iPhone XS Max和HTC U12+ ...

  2. [JZOJ]1293.气象牛[区间DP]

    Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1-M_N(1 <= M_i <= 1 ...

  3. IDEA 分屏显示

    效果: 步骤: 对着某个标签页单击右键,选择Split Vertically或者Split Horizontally即可.

  4. Spring框架模块

    Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Control – I ...

  5. 【Java Spring 进阶之路 】1.Spring 是什么?

  6. 2.10 Jetpack LiveData部分

    LiveData是一个可观察的数据持有者类,但和其他的可观察对象不同,它与生命周期相关联,比如Activity的生命周期.LiveData能确保仅在Activity处于活动状态下才会更新.也就是说当观 ...

  7. 数组空值empty

    Array构造函数只带一个数字参数时(否则是作为填充),该参数会被作为数组的预设长度,而非填充一个元素,因此数组内是空单元 如果一个数组中存在一个空单元,即length的值大于实际单元数,这样的数组称 ...

  8. maven学习(三)-使用maven来创建项目

    转自https://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...

  9. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring DI(依赖注入)的实现方式属性注入和构造注入

    依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念. 当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的 ...

  10. Python基本数据类型之字符串

    Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符.如下表: 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a ...