数据类型之集合(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)
    
posted @ 2017-05-31 11:30  xtrdb.net  阅读(127)  评论(0编辑  收藏  举报