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. jQuery省市联动(XML/JSON)

    准备: 导包 在src下导入c3p0-config.xml 导入JDBCUtil 创建数据库 新建js文件夹导入jQuery配置文件 NO01:创建city.jsp页面 <%@ page lan ...

  2. C# 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

    今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系". ...

  3. SQL Server 语法大全

    SQL语句参考,包含Access.MySQL 以及 SQL Server 基础 创建数据库 CREATE DATABASE database-name 删除数据库 drop database dbna ...

  4. C#路径2

    String apppath = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; //获取整个文件路径名ap ...

  5. Sqlserver 增删改查----改

    --我们就以院系,班级,学生来举例. create TABLE [dbo].YuanXi ( Id ,) NOT NULL,--学校id 自增量 YuanXiName varchar() null, ...

  6. vue学习(十二)vue全家桶 Vue-router&Vuex

    一 vue-router的安装 二 vue-router的基本使用 三 命名路由 四 动态路由的匹配和路由组件的复用 一 vue-router的安装 NPM npm install vue-route ...

  7. js 工厂设计模式

    class Product{ constructor(name){ this.name = name; } init(){ alert(this.name); } } function Creator ...

  8. java菜鸡循环练习

    While 循环练习  输入3次密码,则打印密码锁定 package com.lv.test; import java.util.Scanner; public class DemoPass { pu ...

  9. Java compare方法和compareTo方法

    Java Comparator接口排序用法,详细介绍可以阅读这个链接的内容:https://www.cnblogs.com/shizhijie/p/7657049.html 对于 public int ...

  10. C语言预处理理论

    C语言预处理理论1.从源码到可执行文件的过程(1)源码.c->(编译)->elf可执行程序(2)源码.c->(编译)->目标文件.o->(链接)->elf可执行程序 ...