Python入门篇-高级数据类型集合(set)和字典(dict)
生活随笔
收集整理的這篇文章主要介紹了
Python入门篇-高级数据类型集合(set)和字典(dict)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Python入門篇-高級(jí)數(shù)據(jù)類型集合(set)和字典(dict)
作者:尹正杰
版權(quán)聲明:原創(chuàng)作品,謝絕轉(zhuǎn)載!否則將追究法律責(zé)任。
?
?
?
一.集合(set)
1>.集合的特點(diǎn)
約定set 翻譯為集合collection 翻譯為集合類型,是一個(gè)大概念set可變的、無序的、不重復(fù)的元素的集合
2>.set定義和初始化
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com'''set() -> new empty set objectset(iterable) -> new set object '''s1 = set()s2 = set(range(10))s3 = set(list(range(20)))#dict s4 = {}#set s5 = {1,3,5,7,9}s6 = {(1,3),5,'A'}#集合只能存放不可變的的元素,如果存放list和bytearray時(shí)會(huì)報(bào)錯(cuò):"unhashable type" s7 = {(2,),3,None,"abc",b"ABC"}s8 = set(enumerate(range(5)))print(s1) print(s2) print(s3) print(s4) print(s5) print(s6) print(s7) print(s8)#以上代碼執(zhí)行結(jié)果如下: set() {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19} {} {1, 3, 5, 7, 9} {'A', (1, 3), 5} {3, None, (2,), b'ABC', 'abc'} {(0, 0), (3, 3), (4, 4), (2, 2), (1, 1)}3>.set的元素
set的元素要求必須可以hash目前學(xué)過的不可hash的類型有l(wèi)ist、set元素不可以索引set可以迭代4>.set增加
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' add(elem)增加一個(gè)元素到set中如果元素存在,什么都不做 '''s1 = {1,3,5} print(s1)s1.add(100) print(s1)#以上代碼執(zhí)行結(jié)果如下: {1, 3, 5} {1, 3, 100, 5} add(elem) 增加一個(gè)元素到set中,如果元素存在,什么都不做 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' update(*others)合并其他元素到set集合中來參數(shù)others必須是可迭代對(duì)象就地修改 '''s1 = {1,3,5} print(s1,id(s1))s1.update([1,3,2],[2,3,4],(6,8)) print(s1,id(s1))#以上代碼執(zhí)行結(jié)果如下: {1, 3, 5} 31487144 {1, 2, 3, 4, 5, 6, 8} 31487144 update(*others) 合并其他元素到set集合中來,參數(shù)others必須是可迭代對(duì)象,就地修改5>.set刪除
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' remove(elem)從set中移除一個(gè)元素元素不存在,拋出KeyError異常。為什么是KeyError?因?yàn)檫@個(gè)key對(duì)應(yīng)的是一個(gè)hash值。 '''s1 = {1,3,5} print(s1)s1.remove(3) print(s1)#以上代碼執(zhí)行結(jié)果如下: {1, 3, 5} {1, 5} remove(elem) 從set中移除一個(gè)元素,元素不存在,拋出KeyError異常 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' pop() -> item移除并返回任意的元素。為什么是任意元素?空集返回KeyError異常 '''s1 = {1,3,5} print(s1)s1.pop() print(s1)#以上代碼執(zhí)行結(jié)果如下: {1, 3, 5} {3, 5} pop() -> item 移除并返回任意的元素。為什么是任意元素? 空集返回KeyError異常 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' discard(elem)從set中移除一個(gè)元素元素不存在,什么都不做 '''s1 = {1,3,5} print(s1)s1.discard(3) print(s1)#以上代碼執(zhí)行結(jié)果如下: {1, 3, 5} {1, 5} discard(elem) 從set中移除一個(gè)元素,元素不存在,什么都不做 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' clear()移除所有元素 '''s1 = {1,3,5} print(s1)s1.clear() print(s1)#以上代碼執(zhí)行結(jié)果如下: {1, 3, 5} set() clear() 移除所有元素6>.set修改、查詢
修改要么刪除,要么加入新的元素為什么沒有修改?查詢非線性結(jié)構(gòu),無法索引
遍歷可以迭代所有元素
成員運(yùn)算符in 和not in 判斷元素是否在set中效率要比線性結(jié)構(gòu)數(shù)據(jù)要高,時(shí)間復(fù)雜度為O(1)。
7>.set成員運(yùn)算符的比較
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.comimport datetime#注意,這個(gè)值我們可以調(diào)大里面的數(shù)字進(jìn)行測(cè)試,如果在后面再加一個(gè)0就會(huì)把內(nèi)存吃滿。 list_1 = list(range(100000000)) start = datetime.datetime.now() a = -1 in list_1 end = datetime.datetime.now()print("在列表中遍歷一個(gè)數(shù)字耗時(shí)為:{}".format(end - start))set1 = set(range(100000000)) start = datetime.datetime.now() a = -1 in set1 end = datetime.datetime.now() print("在集合中遍歷一個(gè)數(shù)字耗時(shí)為:{}".format(end - start))#以上代碼執(zhí)行結(jié)果如下: 在列表中遍歷一個(gè)數(shù)字耗時(shí)為:0:00:01.236070 在集合中遍歷一個(gè)數(shù)字耗時(shí)為:0:00:008>.set和線性結(jié)構(gòu)
線性結(jié)構(gòu)的查詢時(shí)間復(fù)雜度是O(n),即隨著數(shù)據(jù)規(guī)模的增大而增加耗時(shí)set、dict等結(jié)構(gòu),內(nèi)部使用hash值作為key,時(shí)間復(fù)雜度可以做到O(1),查詢時(shí)間和數(shù)據(jù)規(guī)模無關(guān)可hash數(shù)值型int、float、complex布爾型True、False字符串string、bytestupleNone以上都是不可變類型,成為可哈希類型,hashable
set的元素必須是可hash的
9>.集合運(yùn)算
基本概念全集所有元素的集合。例如實(shí)數(shù)集,所有實(shí)數(shù)組成的集合就是全集子集subset和超集superset一個(gè)集合A所有元素都在另一個(gè)集合B內(nèi),A是B的子集,B是A的超集真子集和真超集A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集并集:多個(gè)集合合并的結(jié)果交集:多個(gè)集合的公共部分差集:集合中除去和其他集合公共部分 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' 并集將兩個(gè)集合A和B的所有的元素合并到一起,組成的集合稱作集合A與集合B的并集union(*others)返回和多個(gè)集合合并后的新的集合| 運(yùn)算符重載等同unionupdate(*others)和多個(gè)集合合并,就地修改|=等同update '''s1 = {1,3,5} s2 = {2,4,6} print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s3 =s1.union(s2) print("s3 = {}".format(s3))s4 = s1 | s2 print("s4 = {}".format(s4))s1.update(s2) print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s2 |= s1 print("s1 = {}".format(s1)) print("s2 = {}".format(s2))#以上代碼執(zhí)行結(jié)果如下: s1 = {1, 3, 5} s2 = {2, 4, 6} s3 = {1, 2, 3, 4, 5, 6} s4 = {1, 2, 3, 4, 5, 6} s1 = {1, 2, 3, 4, 5, 6} s2 = {2, 4, 6} s1 = {1, 2, 3, 4, 5, 6} s2 = {1, 2, 3, 4, 5, 6} 并集:將兩個(gè)集合A和B的所有的元素合并到一起,組成的集合稱作集合A與集合B的并集 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' 交集集合A和B,由所有屬于A且屬于B的元素組成的集合intersection(*others)返回和多個(gè)集合的交集&等同intersectionintersection_update(*others)獲取和多個(gè)集合的交集,并就地修改&=等同intersection_update '''s1 = {1,3,5} s2 = {1,2,3,4,5,6} print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s3 = s1.intersection(s2) print("s3 = {}".format(s3))s4 = s1 & s2 print("s4 = {}".format(s4))s1.intersection_update(s2) print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s2 &= s1 print("s1 = {}".format(s1)) print("s2 = {}".format(s2))#以上代碼執(zhí)行結(jié)果如下: s1 = {1, 3, 5} s2 = {1, 2, 3, 4, 5, 6} s3 = {1, 3, 5} s4 = {1, 3, 5} s1 = {1, 3, 5} s2 = {1, 2, 3, 4, 5, 6} s1 = {1, 3, 5} s2 = {1, 3, 5} 交集:集合A和B,由所有屬于A且屬于B的元素組成的集合 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' 差集集合A和B,由所有屬于A且不屬于B的元素組成的集合difference(*others)返回和多個(gè)集合的差集-等同differencedifference_update(*others)獲取和多個(gè)集合的差集并就地修改-=等同difference_update '''s1 = {1,3,5} s2 = {1,2,3,4,5,6,7,8,9} print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s3 = s2.difference(s1) print("s3 = {}".format(s3))s2.difference_update(s1) print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s4 = {1,3,5,100,200,300} s1 -= s4 print("s1 = {}".format(s1)) print("s2 = {}".format(s2)) print("s4 = {}".format(s4))#以上代碼執(zhí)行結(jié)果如下: s1 = {1, 3, 5} s2 = {1, 2, 3, 4, 5, 6, 7, 8, 9} s3 = {2, 4, 6, 7, 8, 9} s1 = {1, 3, 5} s2 = {2, 4, 6, 7, 8, 9} s1 = set() s2 = {2, 4, 6, 7, 8, 9} s4 = {1, 3, 100, 5, 200, 300} 差集:集合A和B,由所有屬于A且不屬于B的元素組成的集合 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' 對(duì)稱差集集合A和B,由所有不屬于A和B的交集元素組成的集合,記作(A-B)∪(B-A)symmetric_differece(other)返回和另一個(gè)集合的差集^等同symmetric_differecesymmetric_differece_update(other)獲取和另一個(gè)集合的差集并就地修改^=等同symmetric_differece_update '''s1 = {1,3,5} s2 = {100,200,300} print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s3 = s1.symmetric_difference(s2) print("s3 = {}".format(s3))s4 = s1 ^ s2 print("s4 = {}".format(s4))s1.symmetric_difference_update(s2) print("s1 = {}".format(s1)) print("s2 = {}".format(s2))s2 ^= s1 print("s1 = {}".format(s1)) print("s2 = {}".format(s2))#以上代碼執(zhí)行結(jié)果如下: s1 = {1, 3, 5} s2 = {200, 100, 300} s3 = {1, 3, 100, 5, 200, 300} s4 = {1, 3, 100, 5, 200, 300} s1 = {1, 3, 100, 5, 200, 300} s2 = {200, 100, 300} s1 = {1, 3, 100, 5, 200, 300} s2 = {1, 3, 5} 對(duì)稱差集:集合A和B,由所有不屬于A和B的交集元素組成的集合,記作(A-B)∪(B-A)10>.集合運(yùn)算
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' issubset(other)、<=判斷當(dāng)前集合是否是另一個(gè)集合的子集 '''s1 = {1,3,5} s2 = {1,3,5,7,9} print("s1 = {}".format(s1)) print("s2 = {}".format(s2))#判斷當(dāng)前集合是否是另一個(gè)集合的子集 print(s1.issubset(s2))#判斷s2是否是s1的真子集 print(s2 < s1)#判斷當(dāng)前集合是否是other的超集 print(s2.issuperset(s1)) print(s2 >= s1)#判斷s2是否是s1的真超集 print(s2 > s1)#當(dāng)前集合和另一個(gè)集合沒有交集,沒有交集,則返回True print(s2.isdisjoint(s1))#以上代碼執(zhí)行結(jié)果如下: s1 = {1, 3, 5} s2 = {1, 3, 5, 7, 9} True False True True True False11>.集合應(yīng)用
共同好友你的好友A、B、C,他的好友C、B、D,求共同好友交集問題:{'A', 'B', 'C'}.intersection({'B', 'C', 'D'})微信群提醒XXX與群里其他人都不是微信朋友關(guān)系并集:userid in (A | B | C | ...) == False,A、B、C等是微信好友的并集,用戶ID不在這個(gè)并集中,說明他和任何人都不是朋友權(quán)限判斷有一個(gè)API,要求權(quán)限同時(shí)具備A、B、C才能訪問,用戶權(quán)限是B、C、D,判斷用戶是否能夠訪問該APIAPI集合A,權(quán)限集合PA - P = {} ,A-P為空集,說明P包含AA.issubset(P) 也行,A是P的子集也行A & P = A 也行有一個(gè)API,要求權(quán)限具備A、B、C任意一項(xiàng)就可訪問,用戶權(quán)限是B、C、D,判斷用戶是否能夠訪問該APIAPI集合A,權(quán)限集合PA & P != {} 就可以A.isdisjoint(P) == False 表示有交集一個(gè)總?cè)蝿?wù)列表,存儲(chǔ)所有任務(wù)。一個(gè)完成的任務(wù)列表。找出為未完成的任務(wù)業(yè)務(wù)中,任務(wù)ID一般不可以重復(fù)所有任務(wù)ID放到一個(gè)set中,假設(shè)為ALL所有已完成的任務(wù)ID放到一個(gè)set中,假設(shè)為COMPLETED,它是ALL的子集ALL - COMPLETED = UNCOMPLETED12>.集合練習(xí)
隨機(jī)產(chǎn)生2組各10個(gè)數(shù)字的列表,如下要求:每個(gè)數(shù)字取值范圍[10,20]統(tǒng)計(jì)20個(gè)數(shù)字中,一共有多少個(gè)不同的數(shù)字?2組中,不重復(fù)的數(shù)字有幾個(gè)?分別是什么?2組中,重復(fù)的數(shù)字有幾個(gè)?分別是什么? #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com a = [1, 9, 7, 5, 6, 7, 8, 8, 2, 6] b = [1, 9, 0, 5, 6, 4, 8, 3, 2, 3] s1 = set(a) s2 = set(b) print(s1) print(s2) print(s1.union(s2)) print(s1.symmetric_difference(s2)) print(s1.intersection(s2))#以上代碼執(zhí)行結(jié)果如下: {1, 2, 5, 6, 7, 8, 9} {0, 1, 2, 3, 4, 5, 6, 8, 9} {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} {0, 3, 4, 7} {1, 2, 5, 6, 8, 9} 參考案例?13>.簡(jiǎn)單排序代碼實(shí)現(xiàn)
簡(jiǎn)單選擇排序?qū)儆谶x擇排序兩兩比較大小,找出極值(極大值或極小值)被放置在固定的位置,這個(gè)固定位置一般指的是某一端結(jié)果分為升序和降序排列降序n個(gè)數(shù)從左至右,索引從0開始到n-1,兩兩依次比較,記錄大值索引,此輪所有數(shù)比較完畢,將大數(shù)和索引0數(shù)交換,如果大數(shù)就是索引1,不交換。第二輪,從1開始比較,找到最大值,將它和索引1位置交換,如果它就在索引1位置則不交換。依次類推,每次左邊都會(huì)固定下一個(gè)大數(shù)。升序和降序相反簡(jiǎn)單選擇排序總結(jié):簡(jiǎn)單選擇排序需要數(shù)據(jù)一輪輪比較,并在每一輪中發(fā)現(xiàn)極值沒有辦法知道當(dāng)前輪是否已經(jīng)達(dá)到排序要求,但是可以知道極值是否在目標(biāo)索引位置上遍歷次數(shù)1,...,n-1之和n(n-1)/2時(shí)間復(fù)雜度O(n2)減少了交換次數(shù),提高了效率,性能略好于冒泡法#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com m_list = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[9,8,7,6,5,4,3,2,1] ]nums = m_list[1]length = len(nums)print(nums)count_swap = 0 count_iter = 0for i in range(length):maxindex = ifor j in range(i +1,length):count_iter += 1if nums[maxindex] < nums[j]:maxindex = jif i != maxindex:tmp = nums[i]nums[i] = nums[maxindex]nums[maxindex] = tmpcount_swap += 1print(nums,count_swap,count_iter) 簡(jiǎn)單選擇排序代碼實(shí)現(xiàn)(一) #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com m_list = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[9,8,7,6,5,4,3,2,1] ]nums = m_list[1]length = len(nums)print(nums)count_swap = 0 count_iter = 0for i in range(length // 2):maxindex = iminindex = -i - 1minorigin = minindexfor j in range(i +1,length - i ):count_iter += 1if nums[maxindex] < nums[j]:maxindex = jif nums[minindex] > nums[-j - 1]:minindex = -j -1if i != maxindex:tmp = nums[i]nums[i] = nums[maxindex]nums[maxindex] = tmpcount_swap += 1if i == minindex or i == length + minindex:minindex = maxindexif minorigin != minindex:tmp = nums[minorigin]nums[minorigin] = nums[minindex]nums[minindex] = tmpcount_swap += 1print(nums,count_swap,count_iter) 簡(jiǎn)單選擇排序代碼實(shí)現(xiàn)(二),優(yōu)化版 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com m_list = [[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[9,8,7,6,5,4,3,2,1] ]nums = m_list[1]length = len(nums)print(nums)count_swap = 0 count_iter = 0for i in range(length // 2):maxindex = iminindex = -i - 1minorigin = minindexfor j in range(i +1,length - i ):count_iter += 1if nums[maxindex] < nums[j]:maxindex = jif nums[minindex] > nums[-j - 1]:minindex = -j -1# print(maxindex,minindex)if nums[maxindex] == nums[minindex]:breakif i != maxindex:tmp = nums[i]nums[i] = nums[maxindex]nums[maxindex] = tmpcount_swap += 1if i == minindex or i == length + minindex:minindex = maxindexif minorigin != minindex and nums[minorigin] != nums[minindex]:tmp = nums[minorigin]nums[minorigin] = nums[minindex]nums[minorigin] = tmpcount_swap += 1print(nums,count_swap,count_iter) 簡(jiǎn)單選擇排序代碼實(shí)現(xiàn)(三),優(yōu)化改進(jìn)版
?
二.字典(dict)
1>.字典特點(diǎn)
key-value鍵值對(duì)的數(shù)據(jù)的集合可變的、無序的、key不重復(fù)2>.字典定義和初始化
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com#定義一個(gè)空字典 d1 = dict()#和上面的方法一致,也是定義了一個(gè)空字典 d2 = {}#dict(**kwargs) 使用name=value對(duì)初始化一個(gè)字典 d3 = dict(a=10,b=20,c=[123])#dict(iterable, **kwarg) 使用可迭代對(duì)象和name=value對(duì)構(gòu)造字典,不過可迭代對(duì)象的元素必須是一個(gè)二元結(jié)構(gòu) d4 = dict(((1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'))) d5 = dict(([1,'a'],[2,'b'],[3,'c'],[4,'d'],(5,'e')))#dict(mapping, **kwarg) 使用一個(gè)字典構(gòu)建另一個(gè)字典 d6 = {'a':10, 'b':20, 'c':None, 'd':[1,2,3]}#類方法dict.fromkeys(iterable, value) d7 = dict.fromkeys(range(5)) d8 = dict.fromkeys(range(5),666)print("d1 = {}".format(d1)) print("d2 = {}".format(d2)) print("d3 = {}".format(d3)) print("d4 = {}".format(d4)) print("d5 = {}".format(d5)) print("d6 = {}".format(d6)) print("d7 = {}".format(d7)) print("d8 = {}".format(d8))#以上代碼輸出結(jié)果如下: d1 = {} d2 = {} d3 = {'a': 10, 'b': 20, 'c': [123]} d4 = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'} d5 = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'} d6 = {'a': 10, 'b': 20, 'c': None, 'd': [1, 2, 3]} d7 = {0: None, 1: None, 2: None, 3: None, 4: None} d8 = {0: 666, 1: 666, 2: 666, 3: 666, 4: 666}3>.字典元素的訪問
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' d[key]返回key對(duì)應(yīng)的值valuekey不存在拋出KeyError異常 '''d1 = {'Name': "Jason Yin", 'Age': 18, 'Hobby': ["跑步","旅行","寫博客"]}print("d1 = {}".format(d1)) print("姓名:{},年齡:{},愛好:{}".format(d1["Name"],d1["Age"],d1["Hobby"]))#以上代碼輸出結(jié)果如下: d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} 姓名:Jason Yin,年齡:18,愛好:['跑步', '旅行', '寫博客'] d[key] 返回key對(duì)應(yīng)的值value key不存在拋出KeyError異常 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' get(key[, default])返回key對(duì)應(yīng)的值valuekey不存在返回缺省值,如果沒有設(shè)置缺省值就返回None '''d1 = {'Name': "Jason Yin", 'Age': 18, 'Hobby': ["跑步","旅行","寫博客"]}print(d1.get("Name"))print(d1.get("forte")) print(d1.get("forte","該key不存在!"))#以上代碼執(zhí)行結(jié)果如下: Jason Yin None 該key不存在! get(key[, default]) 返回key對(duì)應(yīng)的值value key不存在返回缺省值,如果沒有設(shè)置缺省值就返回None #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' setdefault(key[, default])返回key對(duì)應(yīng)的值valuekey不存在,添加kv對(duì),value為default,并返回default,如果default沒有設(shè)置,缺省為None '''d1 = {'Name': "Jason Yin", 'Age': 18, 'Hobby': ["跑步","旅行","寫博客"]}print("d1={}".format(d1))print(d1.setdefault("Name","Yinzhengjie"))print(d1.setdefault("forte","大數(shù)據(jù)運(yùn)維開發(fā)"))print("d1={}".format(d1))#以上代碼執(zhí)行結(jié)果如下: d1={'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} Jason Yin 大數(shù)據(jù)運(yùn)維開發(fā) d1={'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客'], 'forte': '大數(shù)據(jù)運(yùn)維開發(fā)'} setdefault(key[, default]) 返回key對(duì)應(yīng)的值value key不存在,添加kv對(duì),value為default,并返回default,如果default沒有設(shè)置,缺省為None4>.字典增加和修改
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' d[key] = value將key對(duì)應(yīng)的值修改為valuekey不存在添加新的kv對(duì) '''d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} print("d1={}".format(d1))d1["Name"] = "Yinszhengjie" print("d1={}".format(d1))d1["forte"] = "大數(shù)據(jù)運(yùn)維開發(fā)" print("d1={}".format(d1))#以上代碼執(zhí)行結(jié)果如下: d1={'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} d1={'Name': 'Yinszhengjie', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} d1={'Name': 'Yinszhengjie', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客'], 'forte': '大數(shù)據(jù)運(yùn)維開發(fā)'} d[key] = value 將key對(duì)應(yīng)的值修改為value key不存在添加新的kv對(duì) #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' update([other]) -> None使用另一個(gè)字典的kv對(duì)更新本字典key不存在,就添加key存在,覆蓋已經(jīng)存在的key對(duì)應(yīng)的值就地修改 '''d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} print("d1={}".format(d1))d1.update(Age=20) print("d1={}".format(d1))d1.update((('Age',24),)) print("d1={}".format(d1))d1.update({"Age":26}) print("d1={}".format(d1))#以上代碼執(zhí)行結(jié)果如下: d1={'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} d1={'Name': 'Jason Yin', 'Age': 20, 'Hobby': ['跑步', '旅行', '寫博客']} d1={'Name': 'Jason Yin', 'Age': 24, 'Hobby': ['跑步', '旅行', '寫博客']} d1={'Name': 'Jason Yin', 'Age': 26, 'Hobby': ['跑步', '旅行', '寫博客']} update([other]) -> None 使用另一個(gè)字典的kv對(duì)更新本字典 key不存在,就添加 key存在,覆蓋已經(jīng)存在的key對(duì)應(yīng)的值 就地修改5>.字典刪除
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' pop(key[, default])key存在,移除它,并返回它的valuekey不存在,返回給定的defaultdefault未設(shè)置,key不存在則拋出KeyError異常 '''d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} print("d1={}".format(d1))d1.pop("Hobby") print("d1={}".format(d1))#以上代碼執(zhí)行結(jié)果如下: d1={'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} d1={'Name': 'Jason Yin', 'Age': 18} pop(key[, default]) key存在,移除它,并返回它的value key不存在,返回給定的default default未設(shè)置,key不存在則拋出KeyError異常 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' popitem()移除并返回一個(gè)任意的鍵值對(duì)字典為empty,拋出KeyError異常 '''d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} print("d1={}".format(d1))d1.popitem() print("d1={}".format(d1))#以上代碼執(zhí)行結(jié)果如下: d1={'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} d1={'Name': 'Jason Yin', 'Age': 18} popitem() 移除并返回一個(gè)任意的鍵值對(duì) 字典為empty,拋出KeyError異常 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' clear()清空字典 '''d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} print("d1={}".format(d1))d1.clear() print("d1={}".format(d1))#以上代碼執(zhí)行結(jié)果如下: d1={'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']} d1={} clear() 清空字典 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com'''del語句 '''a = True b = [6] d = {'a': 1, 'b': b, 'c': [1,3,5]} print("a = {}".format(a)) print("b = {}".format(b)) print("d = {}".format(d))#刪除對(duì)象“a” del a#看著像刪除了一個(gè)對(duì)象,本質(zhì)上減少了一個(gè)對(duì)象的引用,del 實(shí)際上刪除的是名稱,而不是對(duì)象 del d['c'] del b[0]c = b del c del b b = d['b']# print("a = {}".format(a)) print("b = {}".format(b)) print("d = {}".format(d)) # print("c = {}".format(c))#以上代碼執(zhí)行結(jié)果如下: a = True b = [6] d = {'a': 1, 'b': [6], 'c': [1, 3, 5]} b = [] d = {'a': 1, 'b': []} del語句6>.字典遍歷
總結(jié):Python3中,keys、values、items方法返回一個(gè)類似一個(gè)生成器的可迭代對(duì)象,不會(huì)把函數(shù)的返回結(jié)果復(fù)制到內(nèi)存中Dictionary view對(duì)象字典的entry的動(dòng)態(tài)的視圖,字典變化,視圖將反映出這些變化Python2中,上面的方法會(huì)返回一個(gè)新的列表,占據(jù)新的內(nèi)存空間。所以Python2建議使用iterkeys、itervalues、iteritems版本,返回一個(gè)迭代器,而不是一個(gè)copy。字典的key要求和set的元素要求一致:set的元素可以就是看做key,set可以看做dict的簡(jiǎn)化版hashable 可哈希才可以作為key,可以使用hash()測(cè)試d = {1 : 0, 2.0 : 3, "abc" : None, ('hello', 'world', 'python') : "string", b'abc' : '135'} #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']}for item in d1:print(item)print("*" * 20 + "我是分割線" + "*" * 20) for item in d1.keys():print(item)#以上代碼執(zhí)行結(jié)果如下: Name Age Hobby ********************我是分割線******************** Name Age Hobby 只遍歷keys #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']}for item in d1:print(d1[item])print("*" * 20 + "我是分割線" + "*" * 20)for item in d1.keys():print(d1.get(item))print("*" * 20 + "我是分割線" + "*" * 20)for item in d1.values():print(item)#以上代碼執(zhí)行結(jié)果如下: Jason Yin 18 ['跑步', '旅行', '寫博客'] ********************我是分割線******************** Jason Yin 18 ['跑步', '旅行', '寫博客'] ********************我是分割線******************** Jason Yin 18 ['跑步', '旅行', '寫博客'] 只遍歷values #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com d1 = {'Name': 'Jason Yin', 'Age': 18, 'Hobby': ['跑步', '旅行', '寫博客']}for item in d1.items():print(item)print("*" * 20 + "我是分割線" + "*" * 20)for item in d1.items():print(item[0],item[1])print("*" * 20 + "我是分割線" + "*" * 20)for k,v in d1.items():print(k,v)print("*" * 20 + "我是分割線" + "*" * 20)for k,_ in d1.items():print(k)print("*" * 20 + "我是分割線" + "*" * 20)for _,v in d1.items():print(v)#以上代碼執(zhí)行結(jié)果如下: ('Name', 'Jason Yin') ('Age', 18) ('Hobby', ['跑步', '旅行', '寫博客']) ********************我是分割線******************** Name Jason Yin Age 18 Hobby ['跑步', '旅行', '寫博客'] ********************我是分割線******************** Name Jason Yin Age 18 Hobby ['跑步', '旅行', '寫博客'] ********************我是分割線******************** Name Age Hobby ********************我是分割線******************** Jason Yin 18 ['跑步', '旅行', '寫博客'] 遍歷key和vlaue鍵值對(duì)7>.defaultdict
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com""" collections.defaultdict([default_factory[, ...]])第一個(gè)參數(shù)是default_factory,缺省是None,它提供一個(gè)初始化函數(shù)。當(dāng)key不存在的時(shí)候,會(huì)調(diào)用這個(gè)工廠函數(shù)來生成key對(duì)應(yīng)的value """from collections import defaultdict import randomd1 = {}d2 = defaultdict(list)print("d1={}".format(d1)) print("d2={}".format(d2))for k in "abcde":for v in range(random.randint(1,5)):if k not in d1.keys():d1[k] = []d1[k].append(v)print("d1={}".format(d1))for k in "mnopq":for v in range(random.randint(1,5)):d2[k].append(v) print("d2={}".format(d2))#以上代碼輸出結(jié)果如下所示: d1={} d2=defaultdict(<class 'list'>, {}) d1={'a': [0, 1, 2], 'b': [0, 1, 2], 'c': [0, 1, 2, 3, 4], 'd': [0, 1, 2], 'e': [0]} d2=defaultdict(<class 'list'>, {'m': [0, 1, 2, 3], 'n': [0, 1, 2], 'o': [0, 1, 2], 'p': [0, 1, 2, 3, 4], 'q': [0, 1]})8>.orderedDict
#!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com""" collections.OrderedDict([items])key并不是按照加入的順序排列,可以使用OrderedDict記錄順序有序字典可以記錄元素插入的順序,打印的時(shí)候也是按照這個(gè)順序輸出打印 3.6版本的Python的字典就是記錄key插入的順序(IPython不一定有效果)應(yīng)用場(chǎng)景:假如使用字典記錄了N個(gè)產(chǎn)品,這些產(chǎn)品使用ID由小到大加入到字典中除了使用字典檢索的遍歷,有時(shí)候需要取出ID,但是希望是按照輸入的順序,因?yàn)檩斎腠樞蚴怯行虻姆駝t還需要重新把遍歷到的值排序 """from collections import OrderedDict import randomd = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2,'leechee':5} print("d = {}".format(d))keys = list(d.keys()) random.shuffle(keys) print("keys = {}".format(keys))od = OrderedDict() for key in keys:od[key] = d[key]print("od = {}".format(od)) print("od.keys() = {}".format(od.keys()))#以上代碼執(zhí)行結(jié)果如下: d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2, 'leechee': 5} keys = ['leechee', 'apple', 'pear', 'orange', 'banana'] od = OrderedDict([('leechee', 5), ('apple', 4), ('pear', 1), ('orange', 2), ('banana', 3)]) od.keys() = odict_keys(['leechee', 'apple', 'pear', 'orange', 'banana'])9>.字典小試牛刀
需求一:用戶輸入一個(gè)數(shù)字打印每一位數(shù)字及其重復(fù)的次數(shù)需求二:數(shù)字重復(fù)統(tǒng)計(jì)隨機(jī)產(chǎn)生100個(gè)整數(shù)數(shù)字的范圍[-1000, 1000]升序輸出所有不同的數(shù)字及其重復(fù)的次數(shù)
需求三:字符串重復(fù)統(tǒng)計(jì)字符表'abcdefghijklmnopqrstuvwxyz'隨機(jī)挑選2個(gè)字母組成字符串,共挑選100個(gè)降序輸出所有不同的字符串及重復(fù)的次數(shù) #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' 用戶輸入一個(gè)數(shù)字打印每一位數(shù)字及其重復(fù)的次數(shù) '''num = input("請(qǐng)輸入一個(gè)整數(shù):>>> ")d = {}for key in num:if not d.get(key):d[key] = 1continued[key] += 1print(d)#以上代碼執(zhí)行結(jié)果如下: 請(qǐng)輸入一個(gè)整數(shù):>>> 10086 {'1': 1, '0': 2, '8': 1, '6': 1} 需求一(解法一) #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.com''' 用戶輸入一個(gè)數(shù)字打印每一位數(shù)字及其重復(fù)的次數(shù) '''num = input("請(qǐng)輸入一個(gè)整數(shù):>>> ")d = {}for key in num:if not d.get(key):d[key] = 1else:d[key] += 1print(d)#以上代碼執(zhí)行結(jié)果如下: 請(qǐng)輸入一個(gè)整數(shù):>>> 10086 {'1': 1, '0': 2, '8': 1, '6': 1} 需求一(解法二) #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.comimport random """ 數(shù)字重復(fù)統(tǒng)計(jì)隨機(jī)產(chǎn)生100個(gè)整數(shù)數(shù)字的范圍[-1000, 1000]升序輸出所有不同的數(shù)字及其重復(fù)的次數(shù) """n = 100nums = [0] * nd = {}for i in range(n):nums[i] = random.randint(-1000,1000)print(nums)t = nums.copy() t.sort() print(t)d = {} for x in nums:if x not in d.keys():d[x] = 1else:d[x] += 1print(d)d1 = sorted(d.items()) print(d1)#以上代碼執(zhí)行結(jié)果如下: [192, -254, 796, 920, -764, 28, -972, 48, -709, 613, 927, 191, -480, -461, 199, -686, -846, 448, -49, -588, 129, -295, 229, 433, 938, -363, -573, 181, 565, 906, 667, -615, 422, -614, -492, -373, 678, 123, 193, 308, -84, -493, 503, 203, -837, -386, -210, 897, 683, -206, -987, -660, -801, 402, 311, -562, -655, 936, 997, 892, -134, -664, -805, -573, 124, 399, 992, 999, -802, -17, -588, 11, 599, -221, -746, 199, 680, -276, 88, -945, -573, -29, -939, 181, 495, -763, -384, 916, 150, -681, 509, -795, -100, 391, -614, -115, 210, -836, -401, 413] [-987, -972, -945, -939, -846, -837, -836, -805, -802, -801, -795, -764, -763, -746, -709, -686, -681, -664, -660, -655, -615, -614, -614, -588, -588, -573, -573, -573, -562, -493, -492, -480, -461, -401, -386, -384, -373, -363, -295, -276, -254, -221, -210, -206, -134, -115, -100, -84, -49, -29, -17, 11, 28, 48, 88, 123, 124, 129, 150, 181, 181, 191, 192, 193, 199, 199, 203, 210, 229, 308, 311, 391, 399, 402, 413, 422, 433, 448, 495, 503, 509, 565, 599, 613, 667, 678, 680, 683, 796, 892, 897, 906, 916, 920, 927, 936, 938, 992, 997, 999] {192: 1, -254: 1, 796: 1, 920: 1, -764: 1, 28: 1, -972: 1, 48: 1, -709: 1, 613: 1, 927: 1, 191: 1, -480: 1, -461: 1, 199: 2, -686: 1, -846: 1, 448: 1, -49: 1, -588: 2, 129: 1, -295: 1, 229: 1, 433: 1, 938: 1, -363: 1, -573: 3, 181: 2, 565: 1, 906: 1, 667: 1, -615: 1, 422: 1, -614: 2, -492: 1, -373: 1, 678: 1, 123: 1, 193: 1, 308: 1, -84: 1, -493: 1, 503: 1, 203: 1, -837: 1, -386: 1, -210: 1, 897: 1, 683: 1, -206: 1, -987: 1, -660: 1, -801: 1, 402: 1, 311: 1, -562: 1, -655: 1, 936: 1, 997: 1, 892: 1, -134: 1, -664: 1, -805: 1, 124: 1, 399: 1, 992: 1, 999: 1, -802: 1, -17: 1, 11: 1, 599: 1, -221: 1, -746: 1, 680: 1, -276: 1, 88: 1, -945: 1, -29: 1, -939: 1, 495: 1, -763: 1, -384: 1, 916: 1, 150: 1, -681: 1, 509: 1, -795: 1, -100: 1, 391: 1, -115: 1, 210: 1, -836: 1, -401: 1, 413: 1} [(-987, 1), (-972, 1), (-945, 1), (-939, 1), (-846, 1), (-837, 1), (-836, 1), (-805, 1), (-802, 1), (-801, 1), (-795, 1), (-764, 1), (-763, 1), (-746, 1), (-709, 1), (-686, 1), (-681, 1), (-664, 1), (-660, 1), (-655, 1), (-615, 1), (-614, 2), (-588, 2), (-573, 3), (-562, 1), (-493, 1), (-492, 1), (-480, 1), (-461, 1), (-401, 1), (-386, 1), (-384, 1), (-373, 1), (-363, 1), (-295, 1), (-276, 1), (-254, 1), (-221, 1), (-210, 1), (-206, 1), (-134, 1), (-115, 1), (-100, 1), (-84, 1), (-49, 1), (-29, 1), (-17, 1), (11, 1), (28, 1), (48, 1), (88, 1), (123, 1), (124, 1), (129, 1), (150, 1), (181, 2), (191, 1), (192, 1), (193, 1), (199, 2), (203, 1), (210, 1), (229, 1), (308, 1), (311, 1), (391, 1), (399, 1), (402, 1), (413, 1), (422, 1), (433, 1), (448, 1), (495, 1), (503, 1), (509, 1), (565, 1), (599, 1), (613, 1), (667, 1), (678, 1), (680, 1), (683, 1), (796, 1), (892, 1), (897, 1), (906, 1), (916, 1), (920, 1), (927, 1), (936, 1), (938, 1), (992, 1), (997, 1), (999, 1)] 需求二 #!/usr/bin/env python #_*_coding:utf-8_*_ #@author :yinzhengjie #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/ #EMAIL:y1053419035@qq.comimport random""" 字符串重復(fù)統(tǒng)計(jì)字符表'abcdefghijklmnopqrstuvwxyz'隨機(jī)挑選2個(gè)字母組成字符串,共挑選100個(gè)降序輸出所有不同的字符串及重復(fù)的次數(shù) """alphabet = "abcdefghijklmnopqrstuvwxyz"words = []for _ in range(100):words.append("".join(random.choice(alphabet) for _ in range(2))) #生成器 d = {}for x in words:d[x] = d.get(x,0) + 1print(d)d1 = sorted(d.items(),reverse=True) print(d1)#以上代碼執(zhí)行結(jié)果如下: {'jc': 2, 'sf': 1, 'ju': 1, 'ek': 2, 'il': 1, 'ii': 1, 'db': 1, 'wi': 1, 've': 1, 'ys': 1, 'hm': 1, 'qs': 1, 'hk': 1, 'ok': 1, 'kb': 1, 'uc': 1, 'zj': 1, 'go': 1, 'ot': 1, 'wm': 1, 'ca': 1, 'lz': 1, 'wc': 1, 'av': 1, 'li': 2, 'tn': 1, 'qh': 1, 'fw': 1, 'vr': 1, 'vg': 1, 'rb': 1, 'jf': 1, 'cy': 1, 'iv': 1, 'oi': 1, 'ms': 1, 'de': 1, 'hr': 1, 'ua': 1, 'lq': 1, 'yt': 1, 'nq': 1, 'hu': 1, 'uf': 2, 'cc': 1, 'qx': 1, 'kr': 2, 'ez': 1, 'em': 1, 'zh': 1, 'tb': 1, 'cg': 1, 'tz': 1, 'xf': 1, 'hb': 1, 'va': 1, 'lb': 3, 'nd': 1, 'we': 1, 'tw': 1, 'pj': 1, 'rf': 1, 'gg': 1, 'oc': 1, 'vs': 1, 'vk': 1, 'ap': 1, 'fx': 1, 'ut': 1, 'lr': 1, 'wb': 1, 'og': 1, 'pa': 1, 'cr': 1, 'ul': 1, 'oa': 1, 'yq': 2, 'sz': 1, 'fu': 1, 'wh': 1, 'si': 1, 'jb': 1, 'nx': 1, 'po': 1, 'fq': 1, 'lu': 1, 'uv': 1, 'vq': 1, 'py': 1, 'wg': 2, 'pc': 1} [('zj', 1), ('zh', 1), ('yt', 1), ('ys', 1), ('yq', 2), ('xf', 1), ('wm', 1), ('wi', 1), ('wh', 1), ('wg', 2), ('we', 1), ('wc', 1), ('wb', 1), ('vs', 1), ('vr', 1), ('vq', 1), ('vk', 1), ('vg', 1), ('ve', 1), ('va', 1), ('uv', 1), ('ut', 1), ('ul', 1), ('uf', 2), ('uc', 1), ('ua', 1), ('tz', 1), ('tw', 1), ('tn', 1), ('tb', 1), ('sz', 1), ('si', 1), ('sf', 1), ('rf', 1), ('rb', 1), ('qx', 1), ('qs', 1), ('qh', 1), ('py', 1), ('po', 1), ('pj', 1), ('pc', 1), ('pa', 1), ('ot', 1), ('ok', 1), ('oi', 1), ('og', 1), ('oc', 1), ('oa', 1), ('nx', 1), ('nq', 1), ('nd', 1), ('ms', 1), ('lz', 1), ('lu', 1), ('lr', 1), ('lq', 1), ('li', 2), ('lb', 3), ('kr', 2), ('kb', 1), ('ju', 1), ('jf', 1), ('jc', 2), ('jb', 1), ('iv', 1), ('il', 1), ('ii', 1), ('hu', 1), ('hr', 1), ('hm', 1), ('hk', 1), ('hb', 1), ('go', 1), ('gg', 1), ('fx', 1), ('fw', 1), ('fu', 1), ('fq', 1), ('ez', 1), ('em', 1), ('ek', 2), ('de', 1), ('db', 1), ('cy', 1), ('cr', 1), ('cg', 1), ('cc', 1), ('ca', 1), ('av', 1), ('ap', 1)] 需求三
?
轉(zhuǎn)載于:https://www.cnblogs.com/yinzhengjie/p/10897485.html
總結(jié)
以上是生活随笔為你收集整理的Python入门篇-高级数据类型集合(set)和字典(dict)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PDF页眉页脚怎么设置
- 下一篇: Python的输入指令、格式化输出、基本