2.5.1 集合操作

本节内容

1,集合操作

2,练习题

一、 集合

  • set类型
    set数据类型:s ={11,22,33}
  • 特点:
    1,元素无序且唯一。
    2,可以存放各种数据类型。
    3,天生去重。
  • 主要作用:1,去重 2,关系测试

数据:

list_1 = {1, 3, 4, 5, 6, 7, 9}
list_1 = {2,6,0,66,22,8,4}

1,构建方法

# 基于列表
list_1 = [1,4,5,7,3,6,7,9]
list_1 = set(list_1)
# 基于字符串
list_2 = set("hello")
print(list_1, list_2)
-----------------------------------
{1, 3, 4, 5, 6, 7, 9} {'l', 'o', 'h', 'e'}

2,集合常用操作

s = set([3,5,9,10])      #创建一个数值集合  
t = set("Hello")         #创建一个唯一字符的集合  

a = t | s          # t 和 s的并集  

b = t & s          # t 和 s的交集  

c = t – s          # 求差集(项在t中,但不在s中)  

d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  

# 基本操作:  

t.add('x')            # 添加一项  

s.update([10,37,42])  # 在s中添加多项  

# 使用remove()可以删除一项,不存在则报错:  

t.remove('H')

# len(s)

set 的长度  

# 测试 x 是否是 s 的成员   

x in s

# 测试 x 是否不是 s 的成员

x not in s

# (子集)测试是否 s 中的每一个元素都在 t 中 ,返回bool型

s.issubset(t)

s <= t

# (父集)测试是否 t 中的每一个元素都在 s 中,返回bool型

s.issuperset(t)

s >= t

# 判断是否有交集,如果没有则返回true

s.isdisjoint(t)

# (并集)返回一个新的 set 包含 s 和 t 中的每一个元素

s.union(t)

s | t

# (交集)返回一个新的 set 包含 s 和 t 中的公共元素

s.intersection(t)

s & t

# (差集)返回一个新的 set 包含 s 中有但是 t 中没有的元素

s.difference(t)

s - t

# (对称差集)返回一个新的 set 包含 s 和 t 中不重复的元素

s.symmetric_difference(t)

s ^ t

# 返回 set “s”的一个浅复制。

s.copy()

# 删除集合中的一个元素,如果没有则什么也不做(比remove容错性好)。

s.discard(888)

二、 练习

练习:寻找差异
# 数据库中原有
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 }
}
1,需要删除主机:?
2,需要新建主机:?
3,需要更新主机:? 注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
# 思路:先找两个结合的交集,
# 遍历新字典的key,如果不在更新的字典中则认为是要新增的。
# 遍历就字典的key,如果不在更新的字段中则认为是要删除的。
old_set = set(old_dict.keys())
update_list = list(old_set.intersection(new_dict.keys()))
new_list = []
del_list = []
for i in new_dict.keys():
    if i not in update_list:
        new_list.append(i)
for i in old_dict.keys():
    if i not in update_list:
        del_list.append(i)
print(update_list,new_list,del_list)




posted @ 2018-08-26 10:29  Diligent小十  阅读(106)  评论(0编辑  收藏  举报