Set 集合 和 Dict字典 set 集合 collection 翻译为集合类型,是一个大的概念 如: set 是一个可变的,无序的,不重复的元素集合(已覆盖的形式去除重复的元素) s = set() 创建一个空set s = set(iterable) 创建一个可迭代的集合 set的元素不可以索引 set可以迭代 set中的元素是可hash的元素,一般的可hash元素都是不可变类型数据 hash是将整个元素遍历一遍,不管你是什么类型,即使你是在元组中套了一个list 也不可以hash, hash时会将复合类型里面的元素全部遍历一遍

s = {1,'abd',(3,)} s {1, (3,), 'abd'}

s = {1,'ac',(3,[4])} Traceback (most recent call last): File "<pyshell#53>", line 1, in <module> s = {1,'ac',(3,[4])} TypeError: unhashable type: 'list'

set 与 set 不能使用 +号 连接 set.add(元素) 一次只能添加一个元素,不能叠加 可迭代的对象;如果元素已经存在则什么都不做 s = set()

s.add(range(6)) s {range(0, 6)}

update(*others) >>> Neno 就地修改 多个可迭代对象 ;+标识符(变量名),参数others必须是 可迭代对象 作用:将多个数据集合合并到一个set集合中;迭代时会自行去重
remove(elem) 从set中一出一个元素;元素不存在,抛出KeyError异常(类似字典) discard(elem) 从set中移除一个元素;元素不存在什么都不做 pop() >>>item 移除并返回任意元素;空集返回KeyError异常 clear() 移除所有元素 修改: 要么删除,要么加入新的元素 查询 非线性结构,无法索引 遍历 可迭代所有元素 成员运算符 in 和 not in 判断元素是否在set中 反复in 用set list 效率不高 耗时较长 不推荐使用in的类型之一

dict 定义: 初始化字典 d = {} 创建空字典 d = dict(**kwargs) 使用name = value 初始化一个字典 d = dict.fromkeys(iterable,value) d = dict.fromkeys(range(6),6) 创建一个从零到5的key,值为6;不赋值时,默认为None

访问字典 dict[key] 返回key对应的value值;当 key 不存在时抛出KeyError异常 dict.get(key[,default]) 返回key对应的value值;key不存在时返回缺省值,如果没有缺省值返回Neno setdefault(key [,default]) 返回key对应的value值;key不存在时,添加kv对,value的是为default,返回default 如果么有default值就 缺省为Neno 字典的修改 dict [key] = value 将key对应的值进行修改,赋值 key不存在时 添加新的kv对 update([other])>>>>Neno 就地修改 使用另一个字典的kv对来更新本字典 key不存在时,就添加;存在,就覆盖已经存在的值 字典的删除 dict.pop(key [,default]) 移除的kv对是无序的 key存在就移除它,返回它的value key不存在,返回给定的default;没有设置default是,就抛出keyError异常

#我们直接移除时,会发生遍历元素时 的key值 位移从而移除的元素会出现遗漏 #所以我们要建立一个新的列表,遍历k将元素添加到其中,在实行pop()命令 不能在for循环中删除, d = dict(a=1,b=2,c="abc") 2018.08.14 53:00 keys=[] for k,v in d.items(): if isinstance(v,int): #判断 该值是否是 我们需要的值, keys.append(k) #不是则将key 保存到一个list中

for k in keys: #遍历keys中的k值 找到符合我们 if语句的V值 d.pop(k) #找到就将该元素从字典中移除 print(d)

dict.popitem() 移除并返回一个任意键值对 字典为empty,抛出KeyError异常 dict.clear() 清除字典 del 删除 2018.08.14 13:00不清楚 删除的并不是对象,而是将value的引用计数减一 字典的遍历 字典是由键值对组成的元素集合,所以遍历字典有三种形式 1.遍历key for key in dict.keys: print(key) == for k in dict: list(dict) == list(dict.keys()) 2.遍历value 2018.08.14 24:00 用其他遍历value for value in dict.values : print(value) for k in dict:print(dict[k])或者 3.遍历kv值 for key,value in dict.items : print(kry,value) == list(dict.items()) 总结 python3中,keys、value、items返回一个类似生成器的可迭代对象,不会吧函数的结果复制到内存中 dictionary view对象,可以使用len()、iter()封装成迭代器的语句、in操作 字典的entry的动态视图,针对items,键值对;字典发生变化,视图将反映出这些变化 keys返回一个类set对象,也可以看做是一个set集合 keys values items python2 与 python3 有所不同 36:30 2018.08.14 33:00 不清楚 key的要求和set的元素是一致的 set的元素可以看做key,set可以看走dict的简化版 hashsble可哈希才可以作为key,可用hash()测试 defaultdict缺省字典 collections.defaultdict([default_factory[,......]]) 第一个参数default_factory,缺省为Neno,他提供一个初始化函数。当key不存在时,会调用这个工场函数来生成key对应的value