目录
一.字典
1.dict
- 不可变(可哈希)的数据类型:int,str,bool,tuple。
- 可变(不可哈希)的数据类型:list,dict,set。
- 字典是Python中的映射类型,它以{}括起来,里面的内容是以键值对的形式储存的:
Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的。
Value:任意数据(int,str,bool,tuple,list,dict,set),包括后面要学的实例对象等。
在Python3.5版本(包括此版本)之前,字典是无序的。
在Python3.6版本之后,字典会按照初建字典时的顺序排列(即第一次插入数据的顺序排序)
- 优点:
(1)二分查找去查询(2)存储大量关系型数据
- 缺点:
内存消耗巨大
2.字典的创建
dict 保存的数据不能进行切片工作,他只能通过key来获取dict中的数据
# 方式1:
dic1 = dict((('one', 1),('two', 2),('three', 3)))
dic2 = dict([('one', 1),('two', 2),('three', 3)])
print(dic1) #{'one': 1, 'two': 2, 'three': 3}
print(dic2) #{'one': 1, 'two': 2, 'three': 3}
# 方式2:
dic = dict(one=1,two=2,three=3)
print(dic) #{'one': 1, 'two': 2, 'three': 3}
# 方式3:
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic) #{'one': 1, 'two': 2, 'three': 3}
# 方式4:
dic = dict(zip(['one', 'two', 'three'],[1, 2, 3]))
print(dic) #{'one': 1, 'two': 2, 'three': 3}
# 方式5: 字典推导式
dic = { k: v for k,v in [('one', 1),('two', 2),('three', 3)]}
print(dic) #{'one': 1, 'two': 2, 'three': 3}
3.字典的相关操作
1)增删改查
增
(1) 通过键值对直接添加:
#原字典中不存在key值,直接添加
dic = {"zhou":"zhouyuan","QDD":"qingdu0duo"}
dic ["tang"] = "tangzhengwei"
#{'zhou': 'zhouyuan', 'QDD': 'qingdu0duo', 'tang': 'tangangzhengewi1'}
#如果原字典中Key重复了,会替换掉原来的value
dic = {'zhou': 'zhouyuan', 'QDD': 'qingdu0duo', 'tang': 'tangangzhengewi1'}
dic ["tang"] = "Tangdds"
print(dic)
#{'zhou': 'zhouyuan', 'QDD': 'qingdu0duo', 'tang': 'Tangdds'}
(2) setdefault():
字典中有键值对不做任何改变,没有键值对则添加,如果value没有被设置值,则value默认为None
#如果字典中已经包含了key,不再继续保存
dic = {"zhou":"zhouyuan","QDD":"qingdu0duo"}
dic.setdefault("O","OPPO")
dic.setdefault("O","OPPO pro")
print(dic) #{'zhou': 'zhouyuan', 'QDD': 'qingdu0duo', 'O': 'OPPO'}
删
(1) pop():
#删除一个元素,返回这个元素的value值
dic = {"zhou":"zhouyuan","QDD":"qingdu0du"}
print(dic.pop("QDD")) #qingdu0du
(2) popitem():
随机删除(python3.6对字典进行了排序,默认删除最后一个),有返回值
#随机删除键值对,并将这个键值对返回一个元组类型
dic = {"zhou":"zhouyuan","QDD":"qingdu0du"}
print(dic.popitem()) #('QDD', 'qingdu0du')
(3) del():
#删除的key字典中没有,会报错
dic = {"zhou": "zhouyuan", "QDD": "qingdu0du"}
del dic["zhou"]
print(dic) #{'QDD': 'qingdu0du'}
(4) clear():
#清空字典
dic = {"zhou": "zhouyuan", "QDD": "qingdu0du"}
dic.clear()
print() #{}
改
(1) 键值对更改:
#增加
dic = {"qwer":"tyui","1":"shuzi","question":"answer"}
dic ["biu"] = "gun" #{'qwer': 'tyui', '1': 'shuzi', 'question': 'answer', 'biu': 'gun'}
#更改
dic = {"qwer":"tyui","1":"shuzi","question":"answer"}
dic ["qwer"] = "false" #{'qwer': 'false', '1': 'shuzi', 'question': 'answer'}
(2) update():
#若原字典中存在了key替换,如果不存在添加
dic = {"qwer":"tyui","1":"shuzi","question":"answer"}
dic1 = {"1":"shizijiayi","sun":"sunshai"}
dic.update(dic1) # 把dic中的内容更新到dic1中
print(dic) #{'qwer': 'tyui', '1': 'shizijiayi', 'question': 'answer', 'sun': 'sunshai'}
print(dic1) #{'1': 'shizijiayi', 'sun': 'sunshai'}
查
(1) get():
通过key来获取value的值. 如果key不存在返回None.
可以给出一个默认值. 当key不存在的时候返回默认值
#查询,如果key不存在直接报错
dic = {"qwer":"tyui","1":"shuzi","question":"answer"}
print(dic["qwesd"]) #KeyError: 'qwesd'
dic = {"qwer":"tyui","1":"shuzi","question":"answer"}
print(dic.get("2")) #None
find = dic.get("2","people")
print(find) #people
2)其它操作
#拿到键值对
dic = {"dayth":"sunday","think":"year","air":"icecrame"}
print(dic.items())
#dict_items([('dayth', 'sunday'), ('think', 'year'), ('air', 'icecrame')])
dic = {"dayth":"sunday","think":"year","air":"icecrame"}
print(dic.keys()) #拿到所有的key, 返回key的集合. 像是列表但不是列表
for key in dic.keys(): #可以进行迭代循环
print(key)
print(dic.values()) #拿到所有的values, 返回key的集合. 像是列表. 但是不是列表
for value in dic.values():
print(value)
3)for循环
dic = {1: 'a', 2:'b', 3:'c'}
for a in dic: # 直接循环字典.拿到的是key
print(a)
print(dic[a]) #拿到a对应的value值
#遍厉字典
for item in dic.items(): #(此方法过于繁琐)
print(item[0]) #拿到所有key
print(item[1]) #拿到所有value
#解构,解包 解构的时候必须数量匹配
a,b = (1,2)
print(a) #1
print(b) #2
for k,v in dic.items(): #直接拿到所有的key和value
print(k,v)
4)字典的嵌套
dic = {
"name":"汪峰",
"age": 58,
"wife":{
"name":"国际章",
"salary": 180000,
"age": 37
},
"children":[
{"name":"老大", "age": 18},
{"name":"老二", "age": 118}
]
}
print(dic["children"][1]["age"])
print(dic["wife"]['salary'])
二.集合
1.set
set集合中的元素必须是可hash(int, str, tuple,bool)的, 但是set本⾝身是不可hash得. set是可变的
set就是dict类型的数据但是不保存value, 只保存key. set也用{}表示
set中的元素是不重复的, 且无序的,利用这个特性可以使用set去掉重复。
2.集合的创建
s = {"wangbadan",123,"qdd","饿了么",123}
print(s) #{'qdd', 'wangbadan', 123, '饿了么'}
3.集合的常用操作
1)增删改查
(1) 增:
(2) 删:
(3) 改:
(4) 查:
2)其它操作
set集合本身是可以发生改变的. 是不可hash的. 我们可以使⽤用frozenset来保存数据.
frozenset是不可变的. 也就是一个可哈希的数据类型