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(不可变类型);

posted @ 2018-08-09 21:55  一直飞的无脚鸟  阅读(121)  评论(0编辑  收藏  举报