python-集合、字典
集合和字典
set(可变、无序、不重复)
初始化
#set()->new empty set ibject
a=set()
print(a) #输出:set()
#set(iterable)->new set object
print(set(range(5))) #输出:{0, 1, 2, 3, 4}
print(set(list(range(5)))) #输出:{0, 1, 2, 3, 4}
s={} #1
print(s)
print(type(s)) #输出:<class 'dict'>
s1={(1,2),3,'a'}
print(s1) #输出:{(1, 2), 'a', 3}
s2={[1],(1,),1} #2
print(s2) #TypeError: unhashable type: 'list'
1当{}里没有任何值的时候,系统会判定为字典;
2set元素必须要可以hash,也就是不可变的;
注意:set可以迭代,但是没有索引因为他是无序的;
set操作
#set(elem)增加
s={1,}
s.add(2)
print(s) #输出:{1,2}
s.add(1)
print(s) #输出:{1,2}
#1
#update(*other)
#合并其他元素到set中,other必须是可迭代对象
s1={'da',31,'dd',234,'f',25,}
s2={312,"2",31,"312ds"}
print(s1.update(s2)) #输出:None
print(s1) #输出:{'f', 'da', 'dd', 234, '312ds', '2', 312, 25, 31}
1如果元素存在,则什么也不做
#remove(elem)
#从set中移除一个元素,不存在抛异常
a={'f', 'da', 'dd', 234, '312ds', '2', 312, 25, 31}
print(a.remove('f')) #输出:None
print(a) #输出:{'2', 234, 'da', '312ds', 312, 25, 'dd', 31}
#discard(elem)
#从set中移除一个元素,不存在什么也不做
b={234, '312ds', '2', 312, 25, 31}
print(b.discard(234)) #输出:None
print(b) #输出:{'2', 312, 25, '312ds', 31}
#1
#pop()->item
#移除并返回任意元素
c={312, 25, 31,1789}
print(c.pop())
print(c)
#clear()
#移除所有元素
d={312, 25, 31,1789}
print(d.clear())
print(d)
1在对比remove与discard,应该优先使用discard他的错误提示比较温和;
注意:set为非线性无序的,所有自然没有改这一说,能删一个,增一个来模拟改
字典(可变,无序的、可以不重复)
初始化
#空字典
d1={}
d2=dict()
print(d1)
print(d2)
#使用key=value来初始化
d3=dict(a=12,b=3)
print(d3) #输出:{'a': 12, 'b': 3}
#以下几种方法,必须是二元可迭代结构才能
d4=dict(((1,'a'),(2,'b')))
print(d4) #输出:{1: 'a', 2: 'b'}
d5=dict(([1,'1'],[2,'2']))
print(d5) #输出:{1: '1', 2: '2'}
d6=dict([[1,'1'],[2,'2']])
print(d6) #输出:{1: '1', 2: '2'}
#dict(mapping,**kwarg)使用一个字典构建领一个字典
d7=dict(d6,a=2)
print(d7)
#最简单的定义方法
d8={'a':1,'q':3}
print(d8)
#类方法dict.fromkeys(iterable,value),用来统一赋值
d=dict.fromkeys(range(5))
print(d)
d=dict.fromkeys(range(5),10)
print(d)
字典元素的访问
#d[key],不存在抛异常
d={1: '1', 2: '2', 'a': 2}
print(d['a'])
#get(key,[,default]) 返回key对应的值value,后面可是设置缺省值,不存在返回None
d={1: '1', 2: '2', 'a': 2}
print(d.get(2,"exit")) #输出:2
print(d.get(23,"no exit")) #输出:no exit
print(d)
#setdefault(key,[,default]) 返回key对应的值value,后面可是设置缺省值,不存在返回None
print(d.setdefault(23,"no exit"))
print(d) #输出:{1: '1', 2: '2', 'a': 2, 23: 'no exit'}
#1
1:由上述看来如果查看字典有不存的内容且要加入,那么就要用setdefault
字典的增加和修改
#d[key]=value,如果key不存在那么是添加,如果存在是修改
d={1: '1', 2: '2', 'a': 2}
d["wuyanzu"]="123"
print(d) #输出:{1: '1', 2: '2', 'a': 2, 'wuyanzu': '123'}
#update([other])->None
#使用另一个字典的kv来更新本字典,key不存在就添加,存在就覆盖
d1=dict(apple='a',pear='p')
print(d1.update(d)) #输出:None
print(d1) #输出:{'apple': 'a', 'pear': 'p', 1: '1', 2: '2', 'a': 2, 'wuyanzu': '123'}
字典的删除
a={1: '1', 2: '2', 'a': 2, 'wuyanzu': '123'}
#pop(key,[,default])
#key存在
print(a.pop(1)) #输出:1,返回的是key
print(a) #输出:{2: '2', 'a': 2, 'wuyanzu': '123'}
#key不存在,default存在
a={1: '1', 2: '2', 'a': 2, 'wuyanzu': '123'}
print(a.pop(3,"no exist")) #输出:no exist
#key不存在,default不存在
a={1: '1', 2: '2', 'a': 2, 'wuyanzu': '123'}
print(a.pop(3)) #抛异常,keyerror
a={1: '1', 2: '2', 'a': 2, 'wuyanzu': '123'}
#popitem移除并返回任意一个键值对,直到空字典时,抛出异常
print(a.popitem())
print(a.clear())
print(a)
#输出
('wuyanzu', '123')
None
{}
d={'a':1,'b':'b','c':[1,3,5]}
#del
del d['c']
print(d)
#输出:
{'a': 1, 'b': 'b'}
del删除是减少对象的引用,而不是删除内存里的引用的内容;
字典遍历
d={'a':1,'b':'b','c':[1,3,5]}
#key遍历
for k in d.keys():
print(k)
#输出
a
b
c
for k in d:
print(d[k]) #默认也是对key进行遍历;
#value遍历
for v in d.values():
print(v)
#输出
1
b
[1, 3, 5]
#k,v都遍历
for k,v in d.items():
print(k,v)
#输出
a 1
b b
c [1, 3, 5]
字典的key和set要求一致,必须是hashable(不可变类型);