集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
注:作为一个无序的集合,sets不记录元素位置或者插入点。因此sets不支持indexing,slicing(切片)
1 class set(object): 2 """ 3 set() -> new empty set object 4 set(iterable) -> new set object 5 6 Build an unordered collection of unique elements. 7 """ 8 def add(self, *args, **kwargs): # real signature unknown 9 """ 10 Add an element to a set. #添加元素 11 12 This has no effect if the element is already present. 13 """ 14 pass 15 16 def clear(self, *args, **kwargs): # real signature unknown 17 """ Remove all elements from this set. """ #清除所有元素 18 pass 19 20 def copy(self, *args, **kwargs): # real signature unknown 21 """ Return a shallow copy of a set. """ #浅拷贝 22 pass 23 24 def difference(self, *args, **kwargs): # real signature unknown 25 """ 26 Return the difference of two or more sets as a new set. #a中存在,b中不存在 27 28 (i.e. all elements that are in this set but not the others.) 29 """ 30 pass 31 32 def difference_update(self, *args, **kwargs): # real signature unknown 33 """ Remove all elements of another set from this set. 从当前集合中删除和B中相同的元素""" 34 pass 35 36 def discard(self, *args, **kwargs): # real signature unknown 37 """ 38 Remove an element from a set if it is a member. 移除指定元素,不存在不报错 39 40 If the element is not a member, do nothing. 41 """ 42 pass 43 44 def intersection(self, *args, **kwargs): # real signature unknown 45 """ 46 Return the intersection of two sets as a new set. 交集 47 48 (i.e. all elements that are in both sets.) 49 """ 50 pass 51 52 def intersection_update(self, *args, **kwargs): # real signature unknown 53 """ Update a set with the intersection of itself and another. 取交集并更新到a中 """ 54 pass 55 56 def isdisjoint(self, *args, **kwargs): # real signature unknown 57 """ Return True if two sets have a null intersection. 如果没有交集,返回True """ 58 pass 59 60 def issubset(self, *args, **kwargs): # real signature unknown 61 """ Report whether another set contains this set. 是否是子序列 """ 62 pass 63 64 def issuperset(self, *args, **kwargs): # real signature unknown 65 """ Report whether this set contains another set. 是否是父序列""" 66 pass 67 68 def pop(self, *args, **kwargs): # real signature unknown 69 """ 70 Remove and return an arbitrary set element. 移除元素 71 Raises KeyError if the set is empty. 72 """ 73 pass 74 75 def remove(self, *args, **kwargs): # real signature unknown 76 """ 77 Remove an element from a set; it must be a member. 移除指定元素,不存在保错 78 79 If the element is not a member, raise a KeyError. 80 """ 81 pass 82 83 def symmetric_difference(self, *args, **kwargs): # real signature unknown 84 """ 85 Return the symmetric difference of two sets as a new set. 对称差集,a有b没有 + b有a没有 86 87 (i.e. all elements that are in exactly one of the sets.) 88 """ 89 pass 90 91 def symmetric_difference_update(self, *args, **kwargs): # real signature unknown 92 """ Update a set with the symmetric difference of itself and another. """ 对称差集,并更新到a中 93 pass 94 95 def union(self, *args, **kwargs): # real signature unknown 96 """ 97 Return the union of sets as a new set. 并集 98 99 (i.e. all elements that are in either set.) 100 """ 101 pass 102 103 def update(self, *args, **kwargs): # real signature unknown 104 """ Update a set with the union of itself and others. 更新,一般把一个list通过迭代方式更新到set集群中""" 105 pass
练习:寻找差异
1 # 数据库中原有 2 old_dict = { 3 "#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 }, 4 "#2":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 } 5 "#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 } 6 } 7 8 # cmdb 新汇报的数据 9 new_dict = { 10 "#1":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 800 }, 11 "#3":{ 'hostname':c1, 'cpu_count': 2, 'mem_capicity': 80 } 12 "#4":{ 'hostname':c2, 'cpu_count': 2, 'mem_capicity': 80 } 13 }
1 old_set = set(old_dict.keys()) #获取数据库中的主键 2 new_set = set(new_dict.keys()) 3 4 remove_set = old_set.difference(new_set) #数据库中需要删除的集合 5 add_set = new_set.difference(old_set) #数据库中需要增加的集合 6 update_set = old_set.intersection(new_set) #数据库中需要更新的集合