欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

高效利用Python內置的數據結構

系統 1884 0

0x00:創建一鍵多值字典

字典是Python中的一種可變容器,通常以這種形式出現:
d = {key1:value1, key2:value2, key3:value3}
Python沒有規定字典中值的類型,所以如果想讓字典中的一個鍵對應多個值,只要把這些值放到列表這樣的容器里就行了。

          
            student = {
    'a': [76, 54, 82],
    'b': [92, 67, 88]
}
          
        

為了方便創建這樣的字典,可以使用 collections 模塊中的 defaultdict 類。一般在訪問一個字典中不存在的key時會報錯,defaultdict類則會自動初始化一個默認值。使用defaultdict可以這樣創建一個值為列表的字典:

          
            d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['a'].append(3)
          
        

0x01:有序字典

Python中字典的key是不記錄順序的,如果我們想在對字典進行迭代或者序列化操作時掌握元素的順序,可以使用 collections 模塊中的 OrderedDict 類。

          
            >>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d['a'] = 1
>>> d['b'] = 2
>>> d['c'] = 3
>>> for key in d:
...     print(key, d[key])
... 
a 1
b 2
c 3
          
        

OrderedDict內部維護了一個雙向鏈表,每當字典中創建新元素,就會被放到鏈表的末尾。對已存在的鍵重新賦值不會改變鍵的順序。由于OrderedDict創建了額外的鏈表,所以占用空間會比普通的字典要多。使用這個類要注意取舍。

0x02:對序列去重但保持順序不變

要想去除一個列表中的重復項,只需要使用 set() 就可以了,set創建一個無重復項的集合,可以對其求交集、并集等操作。但是,這種集合對象是無序的。

          
            >>> a = [1, 4, 6, 1, 2, 1, 3, 6, 2]
>>> b = set(a)
>>> b
{1, 2, 3, 4, 6}
          
        

如果你既想要去除重復項,又想保留順序,可以通過 set() 加生成器的方式解決:

          
            def dedupe(items):
    seen = set()
    for item in items:
        if item in items:
            if item not in seen:
                yield item
                seen.add(item)
          
        

這只有當序列中的元素是不可變對象時起作用,例如整數、字符串、元組。如果要應用在列表這類可變容器上,要對代碼稍作修改:

          
            def dedupe(items):
    seen = set()
    for item in items:
        val = item if key is None else key(item)
        if val not in seen:
            yield item
            seen.add(val)
          
        

這里使用key參數來指定一個函數將序列中元素轉變為不可變類型。

0x03:統計元素的數量

如何找出一本書中出現頻率最高的單詞呢?或者想知道一個列表中相同元素出現的次數應該怎么做?使用 collections 模塊中的 Counter 類可以輕松做到。

          
            >>> from collections import Counter
>>> words = ['apple', 'keys', 'double', 'dude', 'eye', 'love', 'magic', 'double', 'magic', 'spell', 'apple', 'point', 'apple']
>>> count = Counter(words)
>>> count
Counter({'apple': 3, 'double': 2, 'magic': 2, 'keys': 1, 'dude': 1, 'eye': 1, 'love': 1, 'spell': 1, 'point': 1})

          
        

還可以使用Counter類的 most_common 方法來求排名前幾的元素:

          
            >>> top = count.most_common(3)
>>> print(top)
[('apple', 3), ('double', 2), ('magic', 2)]
>>> 

          
        

另外,Counter對象還可以做數學運算:

          
            >>> words = ['apple', 'keys', 'double', 'dude', 'eye', 'love', 'magic', 'double', 'magic', 'spell', 'apple', 'point', 'apple']
>>> other = ['apple', 'cool', 'duck', 'cookie']
>>> a = Counter(words)
>>> b = Counter(other)
>>> a
Counter({'apple': 3, 'double': 2, 'magic': 2, 'keys': 1, 'dude': 1, 'eye': 1, 'love': 1, 'spell': 1, 'point': 1})
>>> b
Counter({'apple': 1, 'cool': 1, 'duck': 1, 'cookie': 1})
>>> a + b
Counter({'apple': 4, 'double': 2, 'magic': 2, 'keys': 1, 'dude': 1, 'eye': 1, 'love': 1, 'spell': 1, 'point': 1, 'cool': 1, 'duck': 1, 'cookie': 1})
>>> 

          
        

Counter 類能夠幫助我們很好地對數據做統計,當然,如果你是在做算法題,請不要使用它來取巧。

0x04:字典推導式

想要創建一個字典的子集,可以用字典推導式(dictionary comprehension)輕松搞定。沒錯,列表有列表生成式,字典也有字典推導式。

          
            >>> students = {'a':98, 'b':45, 'c':73, 'd':59}
>>> passed = {key:value for key, value in students.items() if value >= 60}
>>> passed
{'a': 98, 'c': 73}
>>> 
          
        

看,我們很輕松地通過記錄所有學生成績的字典獲得了及格學生的成績。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91欧美精品激情在线观看 | 久久一区精品 | 欧美一区二区在线播放 | 草草影院浮力 | 国产高清成人 | 天天爱天天操 | 亚洲天堂一区二区三区 | av大片| 亚洲网站免费看 | 欧美日本国产 | 久久久久久91香蕉国产 | 久久久久亚洲精品 | www.99热| 一级黄色毛片视频 | 亚洲国产综合精品中文第一区 | 91精品国产综合久久青草 | 久久亚洲精品中文字幕二区 | 欧美精品一区二区精品久久 | 欧美激情精品久久久久久变态 | 一区二区三区四区免费 | 美女国产一区 | 九九99久久| 天堂资源在线 | 国产日韩一区二区三区 | 日韩一区二区三区在线看 | 亚洲aⅴ天堂av在线电影软件 | 5月激情网 | 久久精品二区亚洲w码 | 国产网站大全 | 天堂资源在线8 | 欧美黄网在线 | 日韩精品视频在线观看免费 | 亚洲精品一区二区三区在线观看 | 日韩精品久久久久久久电影 | 国产精品13页 | 日韩黄色视屏 | 在线午夜| 久久国产精品一区 | 日韩有码在线播放 | 精品国产成a人在线观看 | 国产精品黄网站免费进入 |