数据类型之集合(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)

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

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

>>> A.discard(4)
>>> A

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)

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

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) //取出两者异同数据

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

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)

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

  • 练习

    数据库中原有

    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  阅读(156)  评论(0)    收藏  举报