亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python字典高級用法有哪些

發布時間:2022-10-14 09:09:38 來源:億速云 閱讀:137 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Python字典高級用法有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python字典高級用法有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    一、 collections 中 defaultdict 的使用

    1.字典的鍵映射多個值

    將下面的列表轉成字典

    l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]

    一個字典就是一個鍵對應一個單值的映射,而上面的列表中有相同鍵。如果你想要一個鍵映射多個值,那么就需要將這多個值放到另外的序列中,比如 list 或者 set 里面,像下面這樣:

    d = {
        'a': [1, 2, 3],
        'b': [4, 5]
    }
    e = {
        'a': {1, 2, 3},
        'b': {4, 5}
    }

    你可以很方便的使用 collections 模塊中的 defaultdict 來構造這樣的字典。 defaultdict 的一個特征是它會自動初始化每個 key 剛開始對應的值。

    In [1]: l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]
    In [2]: from collections import defaultdict
    In [3]: d = defaultdict(list)
    In [4]: for key, value in l:
       ...:     d[key].append(value)
       ...: 
    In [5]: d
    Out[5]: defaultdict(list, {'a': [2, 1, 3, 1], 'b': [3, 4, 3]})

    當然這個默認的容器不一定是 list, 也可以是集合 set。根據自己的需求選擇用 list 還是 set 。如果你想保持元素的插入順序就應該使用列表,如果想去掉重復元素就使用集合!

    2.統計字典中某個值出現的次數

    來源于微信交流群里一個朋友工作中的問題,列表中有很多字典,需要統計字典中相同的鍵對應的值的和

    利用 defaultdict 設置默認值的方法 defaultdict(int),代碼如下:

    In [6]: d = defaultdict(int)
    In [7]: objs = [{'F29958SVDK6': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}]
    In [8]: for obj in objs:
       ...:     for key,value in obj.items():
       ...:         d[key] += value
       ...: 
    In [9]: d
    Out[9]: defaultdict(int, {'F29958SVDK6': 60})

    二、collections 創建有序字典

    字典dict是無序的,如果我們想要有序的dict,可以使用OrdereDict 。示例如下:

    In [11]: from collections import OrderedDict
    In [12]: d = OrderedDict()
    In [13]: d['bar'] = 2
    In [14]: d['non'] = 8
    In [15]: d['sek'] = 5
    In [16]: d
    Out[17]: OrderedDict([('bar', 2), ('non', 8), ('sek', 5)])

    OrderedDict 內部維護著一個根據鍵插入順序排序的雙向鏈表。每次當一個新的元 素插入進來的時候,它會被放到鏈表的尾部。對于一個已經存在的鍵的重復賦值不會 改變鍵的順序。

    需要注意的是,一個 OrderedDict 的大小是一個普通字典的兩倍,因為它內部維 護著另外一個鏈表。所以如果你要構建一個需要大量 OrderedDict 實例的數據結構的 時候 (比如讀取 100,000 行 CSV 數據到一個 OrderedDict 列表中去),那么你就得仔細權衡一下是否使用 OrderedDict 帶來的好處要大過額外內存消耗的影響。

    1.改變 key-value 的順序

    OrderedDict 是有序的字典,同時也能改變其順序。比如我們想要改變有序的 OrderedDict 對象的 key-value 順序,可以使用 move_to_end(key)。還是以上面創建的有序字典為例子

    In [18]: d.move_to_end("bar")
    In [20]: d
    Out[20]: OrderedDict([('non', 8), ('sek', 5), ('bar', 2)])

    可以看到之前排在第一位的 bar被移到最后一位了。move_to_end 還接收一個關鍵字參數 last。last 默認為 True,當 last = False 的時候,表示將該鍵移動到最前面!

    2.刪除 key_value

    如果我們要刪除有序字典中的 key-value, 可以使用 popitem 方法, popitem(last=True) 按照先進后出的順序刪除 dict中 的 key-value,popitem(last=False) 按照先進先出的規則刪除 dict 中的 key-value。

    In [42]: d
    Out[42]: OrderedDict([('bar', 2), ('non', 8), ('sek', 5)])
    In [43]: d.popitem(last=False)
    Out[43]: ('bar', 2)
    In [44]: d
    Out[44]: OrderedDict([('non', 8), ('sek', 5)])

    三、字典排序

    利用Python 內置函數 sorted 對字典的鍵或者值進行排序,首先來了解下 sorted 函數

    sorted(iterable, key=None, reverse=False)

    參數說明:

    • iterable – 可迭代對象

    • key – 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。

    • reverse – 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

    1.按照 key 進行排序

    理解了 sorted 函數就好辦了,代碼如下:

    In [55]: d = {'b':3,'a':4,'c':2,'d':1}
    In [57]: d.items()
    Out[57]: dict_items([('b', 3), ('a', 4), ('c', 2), ('d', 1)])
    In [58]: sorted(d.items(), key=lambda i:i[0])
    Out[58]: [('a', 4), ('b', 3), ('c', 2), ('d', 1)]

    2.按照 value 進行排序

    代碼如下:

    In [59]: sorted(d.items(), key=lambda i:i[1])
    Out[59]: [('d', 1), ('c', 2), ('b', 3), ('a', 4)]

    注意排序后的返回值是一個list,而原字典中的名值對被轉換為了list中的元組。

    四、通過某個關鍵字排序一個字典列表

    假設你有一個字典列表, 如下:

    rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
     {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
     {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, 
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004} ]

    你想根據某個或某幾個字典字段來排序這個列表。

    通過使用 operator 模塊的 itemgetter 函數,可以非常容易的排序這樣的數據結構,代碼如下:

    In [46]: from operator import itemgetter
    In [47]: rows_by_fname = sorted(rows, key=itemgetter('fname'))
    In [48]: rows_by_fname
    Out[48]: 
    [{'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
     {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
     {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
     {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]
    In [49]: rows_by_uid = sorted(rows, key=itemgetter('uid'))
    In [50]: rows_by_uid
    Out[50]: 
    [{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
     {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
     {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
     {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}]

    itemgetter() 函數也支持多個 keys,比如下面的代碼:

    In [52]: rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
    In [53]: rows_by_fname
    Out[53]: 
    [{'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
     {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
     {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
     {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]

    讀到這里,這篇“Python字典高級用法有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    宁晋县| 德庆县| 芮城县| 永善县| 崇信县| 连州市| 巴林右旗| 青铜峡市| 灵宝市| 大庆市| 涟源市| 肥西县| 马边| 明水县| 新丰县| 安龙县| 彭阳县| 尤溪县| 德清县| 江源县| 高邮市| 敖汉旗| 赤峰市| 呼图壁县| 渭南市| 黄龙县| 江永县| 遂昌县| 罗城| 临颍县| 苏尼特右旗| 札达县| 台前县| 德惠市| 奉节县| 阿巴嘎旗| 剑阁县| 高雄县| 宁海县| 梅州市| 和田市|