數據類型之集合 set set集合,是一個無序且不重覆的元素集合 A = set([1, 2, 3, 4, 5, 6,]) B = set([2, 3, 4, 5, 6, 7, 8]) type(A) type(B) class set(object): """ set() new empty se ...
數據類型之集合 set
set集合,是一個無序且不重覆的元素集合
A = set([1, 2, 3, 4, 5, 6,])
B = set([2, 3, 4, 5, 6, 7, 8])
type(A)
<class 'set'>
type(B)
<class 'set'>
class set(object):
"""
set() -> new empty set object
set(iterable) -> new set object
Build an unordered collection of unique elements.
"""
def add(self, *args, **kwargs): # real signature unknown
"""
Add an element to a set,添加元素
This has no effect if the element is already present.
"""
pass
def clear(self, *args, **kwargs): # real signature unknown
""" Remove all elements from this set. 清除內容"""
pass
def copy(self, *args, **kwargs): # real signature unknown
""" Return a shallow copy of a set. 淺拷貝 """
pass
def difference(self, *args, **kwargs): # real signature unknown
"""
Return the difference of two or more sets as a new set. A中存在,B中不存在
(i.e. all elements that are in this set but not the others.)
"""
pass
// >>> A = set([1, 2, 3, 4, 5, 6,])
>>> B = set([2, 3, 4, 5, 6, 7, 8])
>>>
>>>
>>> A.difference(B)
{1}
def difference_update(self, *args, **kwargs): # real signature unknown
""" Remove all elements of another set from this set. 從當前集合中刪除和B中相同的元素"""
pass
// >>> A.difference_update(B)
>>> A
{1}
>>> B
{2, 3, 4, 5, 6, 7, 8}
def discard(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set if it is a member.
If the element is not a member, do nothing. 移除指定元素,不存在不保留
"""
pass
// >>> A
{1, 2, 3, 4, 5, 6}
>>> A.discard(4)
>>> A
{1, 2, 3, 5, 6}
def intersection(self, *args, **kwargs): # real signature unknown
"""
Return the intersection of two sets as a new set. 交集
(i.e. all elements that are in both sets.)
"""
pass
// >>> A
{1, 2, 3, 5, 6}
>>> B
{2, 3, 4, 5, 6, 7, 8}
>>> A.intersection(B)
{2, 3, 5, 6}
def intersection_update(self, *args, **kwargs): # real signature unknown
""" Update a set with the intersection of itself and another. 取交集並更更新到A中 """
pass
// >>> A
{1, 2, 3, 5, 6}
>>> B
{2, 3, 4, 5, 6, 7, 8}
>>> A.intersection_update(B)
>>> A
{2, 3, 5, 6}
def isdisjoint(self, *args, **kwargs): # real signature unknown
""" Return True if two sets have a null intersection. 如果沒有交集,返回True,否則返回False"""
pass
def issubset(self, *args, **kwargs): # real signature unknown
""" Report whether another set contains this set. 是否是子序列"""
pass
def issuperset(self, *args, **kwargs): # real signature unknown
""" Report whether this set contains another set. 是否是父序列"""
pass
def pop(self, *args, **kwargs): # real signature unknown
"""
Remove and return an arbitrary set element.
Raises KeyError if the set is empty. 移除元素
"""
pass
def remove(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set; it must be a member.
If the element is not a member, raise a KeyError. 移除指定元素,不存在保錯
"""
pass
def symmetric_difference(self, *args, **kwargs): # real signature unknown
"""
Return the symmetric difference of two sets as a new set. 對稱差集
(i.e. all elements that are in exactly one of the sets.)
"""
pass
// >>> A
{2, 3, 5, 6}
>>> B
{2, 3, 4, 5, 6, 7, 8}
>>> A.symmetric_difference(B) //取出兩者異同數據
{4, 7, 8}
def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
""" Update a set with the symmetric difference of itself and another. 對稱差集,並更新到a中 """
pass
// >>> A
{2, 3, 5, 6}
>>> B
{2, 3, 4, 5, 6, 7, 8}
>>> A.symmetric_difference_update(B)
>>> A
{4, 7, 8}
def union(self, *args, **kwargs): # real signature unknown
"""
Return the union of sets as a new set. 並集
(i.e. all elements that are in either set.)
"""
pass
// >>> A
{4, 7, 8}
>>> B
{2, 3, 4, 5, 6, 7, 8}
>>> A.union(B)
{2, 3, 4, 5, 6, 7, 8}
def update(self, *args, **kwargs): # real signature unknown
""" Update a set with the union of itself and others. 更新 """
pass
// >>> A
{4, 7, 8}
>>> B
{2, 3, 4, 5, 6, 7, 8}
>>> A.update(B)
>>> A
{2, 3, 4, 5, 6, 7, 8}
練習
# 資料庫中原有 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':'c1', 'cpu_count': 2, 'mem_capicity': 800 }, "#3":{ 'hostname':'c1', 'cpu_count': 2, 'mem_capicity': 80 }, "#4":{ 'hostname':'c2', 'cpu_count': 2, 'mem_capicity': 80 } } #需求三張表: #需要刪除:? #需要新建:? #需要更新:? #註意:無需考慮內部元素是否改變,只要原來存在,新彙報也存在,就是需要更新 scripts: #!/usr/bin/env python old = set(old_dict.keys()) new = set(new_dict.keys()) update_set = old.intersection(new) # 交集 delete_set = old.symmetric_difference(update_set) #對稱差集 add_set = new.symmetric_difference(update_set) print(update_set) print(delete_set) print(add_set)