日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python字典高级用法_Python 进阶编程之字典的高级用法

發布時間:2025/3/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python字典高级用法_Python 进阶编程之字典的高级用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 collections 中 defaultdict 的使用

1.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 。如果你想保持元素的插入順序就應該使用列表,如果想去掉重復元素就使用集合!

1.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 帶來的好處要大過額外內存消耗的影響。

2.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.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 升序(默認)。

3.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)]

3.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字典高级用法_Python 进阶编程之字典的高级用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产xxxx视频| 大屁股白浆一区二区 | 免费污网站在线观看 | 人人妻人人爽欧美成人一区 | 日韩经典av | 182tv福利视频 | 欧美日本高清视频 | 国产精品自拍视频 | 午夜神马影院 | 成人app在线 | 亚洲精品色午夜无码专区日韩 | 色婷在线| 香蕉伊人网 | 丝袜视频在线观看 | 欧美性猛片aaaaaaa做受 | 亚洲国产精品久久精品怡红院 | 91久久久久 | 久久精品视频日本 | 亚洲大尺度视频 | 色婷婷av一区二区三区之红樱桃 | 污漫在线观看 | 亚洲视频一区二区三区在线观看 | 亚洲第一色站 | 欧美精品乱人伦久久久久久 | 一区二区在线看 | 偷偷色噜狠狠狠狠的777米奇 | 色婷婷久久综合 | 国产视频一区二区三区在线 | 日韩无| 国产处女| 久久亚洲av永久无码精品 | 色狠狠综合 | 国产a视频精品免费观看 | www.youjizz日本 | 国产精品永久免费视频 | 在线91av | 国产亚洲一区在线 | 欧洲久久久久久 | 2021天天操 | 饥渴放荡受np公车奶牛 | 成都4电影免费高清 | 狠狠插影院 | 尤物网站在线观看 | 日韩影视一区二区三区 | 亚洲日日干 | 夜色网 | 久久久夜色精品 | 日本丰满少妇做爰爽爽 | 亚洲影视中文字幕 | 国产精品成人av久久 | 国精产品一区一区三区在线 | 影音先锋在线国产 | 人妻在卧室被老板疯狂进入 | 亚洲精品乱码久久久久久蜜桃不卡 | 中文字幕在线视频免费播放 | 依依成人在线 | 香蕉久久精品 | 日韩中文字幕影院 | 国产毛片一区二区三区 | 国产美女免费无遮挡 | 很污的网站| 秋霞在线一区二区 | 日韩精品一区二区三区电影 | 日本视频免费在线 | 野花成人免费视频 | 视频在线观看视频 | 亚欧乱色 | 加勒比hezyo黑人专区 | 日本老年老熟无码 | 奇米婷婷 | 精品国产丝袜一区二区三区乱码 | 免费一级毛片麻豆精品 | 中文字幕欧美视频 | 荫道bbwbbb高潮潮喷 | 国产精品色 | 91丨九色丨蝌蚪丨对白 | 国产第一页在线 | 午夜影院在线 | 国产女主播在线 | 久久久久人妻一区精品色欧美 | 久草成人在线 | av网站在线观看不卡 | 超碰一级片 | 夜夜草网站 | 日韩av在线一区 | 大奶子网站 | 开心色婷婷 | 97热久久 | 91国在线观看| 尤物网址在线观看 | 亚洲精品中文字幕乱码三区91 | 一区二区三区精品免费视频 | 在线观看的av网站 | 国产福利专区 | 性感美女毛片 | 日韩人妻无码精品久久久不卡 | 久久77777 | 婷婷国产视频 | 久久久久女人精品毛片九一 |