python基础知识8——字典与集合

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)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/113479790