十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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 "", line 1, in
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
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。