Python内置了字典:dict(dictionary),在其余语言中称为map,使用键--值(key--vale),查找速度极快。code
特色:键是惟一的,值的内容是无序的。
举个例子:加入你想要根据同窗的姓名查看对应的成绩,用list实现的话。blog
names =["aaa","bbb","ccc"]
scores = [77,88,99]get
给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores中取出对应的成绩。这样的话,list越长,查找的速度就越慢,耗时就越长。数学
若是用dict实现的话,只须要建一个姓名--成绩的对照表就能够了。it
>>>d={"aaa":77,"bbb":88,"ccc":99} >>>d["aaa"] 77
dict.keys() 返回全部的key值到一个列表里。
dict.values() 返回全部的value值到一个列表里。io
可是想要直接调用还须要转化成list(dict.keys())bfc
将数据放入dict中,除了初始化指定外,还能够经过key放入。date
>>>a["aaa"] 77 >>>a["aaa"]=12 >>>a["aaa"] 12
若是key不存在,dict就会新增元素。循环
存在返回True,不存在返回Falsemap
>>>"ddd" in a False >>>"aaa" in a True
存在返回value值,不存在返回None不会有显示,也能够本身设定返回值。
>>>a.get("ddd") >>>a.get("ddd",-1) -1
要删除一个dict.pop(k,d=none)
删除指定K的元素。成功就返回对应的值,失败则返回自定义的d,若是没有定义则报错。
随机删除一个dict.popitem()
del dict[K] :删除指定键的元素。
for i in dict: print(i,dict[i]) i打印dict中的k,经过K打印对应的value,
将dict2中的元素,追加到dict中。若是有重复k键的,用dict2中的value覆盖。
a={1:2,2:3,3:4} b={3:5,4:5} a.update(b) a={1:2,2:3,3:5,4:5} b={3:5,4:5}
set和dict相似,也是一组key的集合,但不存储value。并且set是无序的。
要建立一个set,须要提供一个list做为集合的输入:
>>>a = set([1,2,3]) >>>a {1,2,3}
set中重复的元素会被自动过滤掉:
>>>s = set([1,1,2,3,4,5,6,7,7,7,1]) >>>s {1,2,3,4,5,6,7}
能够经过add(key)方法添加元素到set中。若是重复添加,虽然能够,可是不会有效果。
>>>s =set([1,2,3]) >>>s.add(4) >>>s {1,2,3,4}
能够经过rmove(key)方法删除元素:
>>>s.rmove(4) >>>s {1,2,3}
能够经过discard()方法删除元素和rmove同样。
discard()和rmove()的区别: rmove()若是要删除的元素不存在,则报错。 discard()若是要删除的元素不存在,不会报错。
也能够通pop()方法删除,不过该方法是随机删除的的。
set能够堪称是数学意义上的无序和无重复的集合。所以,两个set能够进行数学意义上的交集,并集等操做。
>>>s1 = set([1,2,3]) >>>s2 = set([2,3,4]) >>>s1 & s2 #交集 s1.intersection(s2) {2,3} s1.update(s2) #将s2中的元素加入到s1中,赋值给s1 >>>s1 | s2 #并集 s1.union(s2) ,依然是自动删除重复元素。 {1,2,3,4} >>>s1 - s2 #相对补集,差集 s1.differrnce(s2) {1} >>>s1.symmetric_difference(s2) #对称差集,把互相不同的打印出来。 >>>s1 ^ s2 {1,4} s1.issubset(s2) 判断s1是否是s2的子集 s1 < s2 s1.issuperset(s2) 判断s1是否是s2父集 s1 > s2 s1.isdisjoint(s2) 若是s1和s2没有交集,则返回True,反之返回False