Python高级编程和异步IO并发编程---学习笔记--- 第六章---第6章 深入python的set和dict

每日提醒:ctrl+鼠标左键可以查看源码,同时辅助使用pycharm侧边栏的structure

6-1 dict的abc继承关系

from collections.abc import Mapping, MutableMapping
#dict属于mapping类型

a = {}
print (isinstance(a, MutableMapping))

6-2 dict的常用方法

1浅拷贝与深拷贝

浅拷贝会改变原来的值

a = {"bobby1":{"company":"imooc"},
     "bobby2": {"company": "imooc2"}
     }
#clear
# a.clear()
# pass
#copy, 返回浅拷贝
new_dict = a.copy()
new_dict["bobby1"]["company"] = "imooc3"

深拷贝,相当于真正建立副本,不会改变原值

a = {"bobby1":{"company":"imooc"},
     "bobby2": {"company": "imooc2"}
     }
#深拷贝
import  copy
new_dic0=copy.deepcopy(a)
new_dic0["bobby1"]["company"] = "imooc3"
print(new_dic0)

2字典的#formkeys方法,赋予新键

#formkeys
new_list = ["bobby1", "bobby2"]
new_dict1 = dict.fromkeys(new_list, {"company":"imooc"})
print(new_dict1)

3get方法   

get方法可以在查询为空时,指定返回值,不为空时,返回原字典中的值
a = {"bobby1":{"company":"imooc"},
     "bobby2": {"company": "imooc2"}
     }

#get方法可以在查询为空时,指定返回值,不为空时,返回原字典中的值
print(a.get("bobbb",{}))
print(a.get("bobby1",{}))

4item方法,进行拆包

a = {"bobby1":{"company":"imooc"},
     "bobby2": {"company": "imooc2"}
     }

#item方法,进行拆包
for key,value in a.items():
    print(key,value)

4setdefault方法查询值,如果查不到key对应的值,则添加设置的值到原来的字典中去

#setdefault方法查询值,如果查不到key对应的值,则添加设置的值到原来的字典中去
print(a.setdefault('booooo',{"这是我设置的默认值"}))

 

5update方法,字典合并:

a = {"bobby1":{"company":"imooc"},
     "bobby2": {"company": "imooc2"}
     }

new_list = ["bobby1", "bobby2"]

new_dict0 = dict.fromkeys(new_list, {"company":"imooc"})
new_dict0.update((("bobby","imooc"),))
new_dict1=new_dict0
print(new_dict1)

6-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)

from collections import UserDict

class Mydict(UserDict):
    def __setitem__(self, key, value):
        super().__setitem__(key, value*2)

my_dict = Mydict(one=1)
# my_dict["one"] = 1
print (my_dict)

from collections import defaultdict

my_dict = defaultdict(dict)
my_value = my_dict["bobby"]

6-4 set和frozense

#set 集合 fronzenset (不可变集合) 无序, 不重复
# s = set('abcdee')
# s = set(['a','b','c','d','e'])
s = {'a','b', 'c'}
# s = frozenset("abcde") #frozenset 可以作为dict的key
# print(s)

#向set添加数据
another_set = set("cef")
re_set = s.difference(another_set)
re_set = s - another_set
re_set = s & another_set
re_set = s | another_set

#set性能很高
# | & -  #集合运算
print(re_set)

print (s.issubset(re_set))
# if "c" in re_set:
#     print ("i am in set")

6-5 dict和set的实现原理

1.  dict的key或者set的值 都必须是可以hash的
#不可变对象 都是可hash的, str, fronzenset, tuple,自己实现的类 __hash__
#2. dict的内存花销大,但是查询速度快, 自定义的对象 或者python内部的对象都是用dict包装的
# 3. dict的存储顺序和元素添加顺序有关
# 4. 添加数据有可能改变已有数据的顺序

6-6小结

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值