set和dict類似,也是一組key的集合,但不存儲value。由於key不能重復,所以,在set中,沒有重復的key
set集合,是一個無序且不重復的元素集合
#set是一個無序且不重復的元素集合 s1=set() s1.add("alex") s1.add("eric") print(s1) #訪問速度快 #天生解決了重復問題 ll=[1,2,3,4,5,6,3,2,1] s2=set(ll) print("轉換后的集合為:",s2) #去除相同項,生成一個新的集合,刪除 s3=s2.difference([1,2,3,11]) print("s2不變:",s2) print("觀察是否生成一個新的集合s3:",s3) s4=s2.difference_update([3,4,5,11]) #刪除所有包含在新集合中的元素,並生成一個新的集合 print("是否改變原集合s2:",s2) print("是否生成新集合s4:",s4) ret=s2.pop() #取出元素,並賦值給ret print("移除s2中的一個元素",s2) print("測試pop是否有返回值,移除的元素是:",ret) ret1=s2.remove(2) #必須帶參數且沒有返回值 print("移除s2中的一個元素:",s2) print("測試remove是否有返回值:",ret1) #練習 # 數據庫中原有 old_dict = { "#1":{ 'hostname':"c1", 'cpu_count': 2, 'mem_capicity': 80 }, "#2":{ 'hostname':"c1", 'cpu_count': 2, 'mem_capicity': 80 }, "#3":{ 'hostname':"c1", 'cpu_count': 2, 'mem_capicity': 80 } } # cmdb 新匯報的數據 new_dict = { "#1":{ 'hostname':"c2", 'cpu_count': 2, 'mem_capicity': 800 }, "#3":{ 'hostname':"c2", 'cpu_count': 2, 'mem_capicity': 80 }, "#4":{ 'hostname':"c2", 'cpu_count': 2, 'mem_capicity': 80 } } """ 分析: 1、新有,原來無→新加入 2、新有,原來有→更新 3、新無,原來有→原來刪除 使用set的交集和差集來計算 old_dict.keys() new_dict.keys() 交集(更新):要更新的數據 差集(刪除):old_dict.keys()--交集 差集(添加):new_dict.keys()--交集 """ old=set(old_dict.keys()) new=set(new_dict.keys()) up_set=old.intersection(new) #需要更新的集合 del_set=old.symmetric_difference(up_set) #需要刪除的集合 add_set=new.symmetric_difference(up_set) #需要添加的集合
比較元素-->difference()
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #set1中有而set2中沒有的值 ret = set1.difference(set2) print(ret)
刪除兩集合中相同的元素-->difference_update
()
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #從set1中刪除和set2中相同的元素 set1.difference_update(set2) print(set1) print(set2)
移除元素-->discard
(values)
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #移除指定元素,不存在不會報錯,remove()不存在會報錯,建議discard set1.discard(44) print(set1)
取交集值-->intersection
()
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #取兩個set集合的交集值 ret = set1.intersection(set2) print(ret)
取交集並更新-->intersection_update
()
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #取交集並更新到set1中 set1.intersection_update(set2) print(set1)
對稱交集-->symmetric_difference
()
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #對稱交集,取兩個集合中互不存在的元素,生成一個新的集合 ret = set1.symmetric_difference(set2) print(ret)
對稱交集並更新-->symmetric_difference_update()
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #對稱交集,並更新元素到set1中 set1.symmetric_difference_update(set2) print(set1)
並集-->union
()
set1 = {1,44,87,23,55} set2 = {1,44,88,23,67} #並集並更新到新的集合中 ret = set1.union(set2) print(ret)