1.字典的基本操作
#字典是无序的,这意味着无法使用索引与切片
#其中字典的key为不可变类型
#创建字典:
heros = {
'及时雨':'宋江', '玉麒麟':'卢俊义', '花和尚':'鲁智深', '母夜叉':'孙二娘'}
print(type(heros))
empty_dict = dict()
print(type(empty_dict))
heros_star = {
'天罡星':{
'及时雨':'宋江', '玉麒麟':'卢俊义', '花和尚':'鲁智深'},
'地罡星':{
'母夜叉':'孙二娘'}}
print(heros['花和尚'])#用key来取值
print(heros_star['天罡星']['花和尚'])
dict_val = {
'黑旋风':'李逵', '黑旋风':'李鬼'}
print(dict_val['黑旋风'])
#在字典中如果键值相同,会默认取最后一个
#字典中新增数据
heros['豹子头'] = '林冲'
print(heros)
#修改数据
heros['及时雨'] = '宋公明'
print(heros)
new_dic = {
'黑旋风':'李逵', '入去龙':'公孙胜', '花和尚':'鲁智深'}
heros.update(new_dic)
print(heros)
#删除del pop popitem clear
del heros['及时雨']
print(heros)
#del 删除整个字典
#pop根据键名删除
heros.pop('花和尚')
print(heros)
heros.popitem()#删除最后一个元素
print(heros)
#清空字典所有元素
heros.clear()
print(heros)
#查询 in 根据键值来查找
if '及时雨' in heros:
print('该元素在字典中')
else:
print('该元素不在字典中')
#取值
Keys = heros.keys()
print(list(Keys))
#print(keys[0])是错误的,不能够直接取值
for key in Keys:
print(key)
v = heros.values()
print(v)
print(list(v))
#items通过这个可以获取键和值
items = heros.items()
print(list(items))
print(list(items)[0])
#元组拆包
k, value = list(items)[0]
print(k,value)
#复制 copy
heros_copy = heros.copy()
heros_copy.pop('及时雨')
print(heros)
print(heros_copy)
2.字典遍历
#遍历key
heros = {
'及时雨':'宋江', '玉麒麟':'卢俊义', '花和尚':'鲁智深', '母夜叉':'孙二娘'}
key = heros.keys()
for k in key:
print(k)
#遍历value
value = heros.values()
for v in value:
print(v)
#遍历item
item = heros.items()
for i in item:
print(i)
#遍历key-value
item = heros.items()
for key, value in item:
print(f'{key}->{value}')
3.集合
#直接赋值
set_val = {
1,2,3,4,5}
print(type(set_val))
empty_set = set()
print(type(empty_set))
#val = {}#空的表示字典,所以创建空集和必须使用set函数来创造
string_val = 'hello world'
s = set(string_val)#集和不会重复,可以去重
print(s)
#集合中只能添加不可变元素
#复制
dic_val = {
'name':'andy'}
new_dict = dic_val.copy()#拷贝副本
#new_dict = dic_val#指向同一内存地坛
dic_val['age'] = 18
print(dic_val)
print(new_dict)
#循环过程中删除可变类型元素引发的Bug
data = [11,22,33,44,55,66,77]
# for i in data:
# if i == 33 or i == 44:
# data.remove(i)
# print(data)
#当移除33后i变为3,指向55,因为移除33后所有元素前进一格
#另一种方法
list_temp = []
for i in data:
if i == 33 or i == 44:
list_temp.append(i)
print(list_temp)
for i in list_temp:
data.remove(i)
print(data)
4.集合基本操作
#增 add
set_val = {
'hello', 123, (1,2,3)}
set_val.add('world')
print(set_val)
#修改 update
new_set = {
4,5,6}
set_val.update(new_set)
print(set_val)
#删除
del new_set
print(new_set)
set_val.pop()
#pop随机删除一个元素
print(set_val)
#remove 移除指定元素,当移除不存在的元素会报错
set_val.remove('world')
#set_val.remove(8)
print(set_val)
#discard 移除指定元素,当移除不存在的元素不会报错,不会做任何改变
set_val.discard('hello')
print(set_val)
#查询 in
if 1 in set_val:
print('Yes')
else:
print('No')
#intersection移除两个集合不存在的元素,返回一个存在相同元素的新集合,之前的两个集合并不
#发生任何变化
#intersection_update移除两个集合不存在的元素,没有返回值,谁使用这个方法就会发生变化
#union返回了两个集合的并集,即包含所有集合的元素,重复的元素只会出现一次
#difference求差集
#交集
set1 = {
1,2,3,30,40,50}
set2 = {
30,40,50,60,70}
set_value = set1.intersection(set2)
print(set_value)
set_v = set1.intersection_update(set2)#update不返回任何值
print(set1)
print(set_v)
#并集
s = set1.union(set2)
print(s)
print(set1)
print(set2)
#差集
set_val = set1.difference_update(set2)
print(set_val)
print(set1)
print(set2)
5.公共操作
#'+'运算符不支持字典与集合操作
list1 = [1,2,3]
list2 = [4,5,6]
list_val = list1+list2
print(list_val)
tuple1 = (1,2,3)
tuple2 = (4,5,6)
tuple_val = tuple1+tuple2
print(tuple_val)
list_val = [1,2,3]
print(list_val*10)
tuple_val = (1,2,3)
print(tuple_val*10)
val = {
'name':'andy', 'gender':'man'}
print(len(val))
print(max(val))
del(val['name'])
print(val)