Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)在字典中將鍵映射到多個(gè)值上的方法
本文實(shí)例講述了Python在字典中將鍵映射到多個(gè)值上的方法。分享給大家供大家參考,具體如下:
問(wèn)題:一個(gè)能將鍵(key)映射到多個(gè)值的字典(即所謂的一鍵多值字典[multidict])
解決方案:如果想讓鍵映射到多值,需要將這多個(gè)值保持到另一個(gè)容器如列表或集合中;
>>> d={'a':[1,2,3],'b':[4,5]} >>> d {'b': [4, 5], 'a': [1, 2, 3]} >>> e={'a':{1,2,3,3},'b':{4,5}} >>> e {'b': {4, 5}, 'a': {1, 2, 3}} >>> f={'a':[1,2,3,3],'b':[4,5]} >>> f {'b': [4, 5], 'a': [1, 2, 3, 3]} >>>
更方便的創(chuàng)建這樣的字典是利用collections模塊中的defaultdict類。defaultdict的一個(gè)特點(diǎn)是它會(huì)自動(dòng)給字典初始化第一個(gè)值,這樣只需添加元素即可。例如:
from collections import defaultdict d=defaultdict(list) #創(chuàng)建一鍵多值的字典,key的value是list類型 d['a'].append(1) d['a'].append(2) d['a'].append(2) d['b'].append(4) c=defaultdict(set) #創(chuàng)建一鍵多值的字典,key的value是set類型 c['a'].add(1) c['a'].add(2) c['a'].add(2) c['b'].add(4) print('key的value是list類型的字典:',d) print('key的value是set類型的字典:',c)
>>> ================================ RESTART ================================ >>> key的value是list類型的字典: defaultdict(<class 'list'>, {'b': [4], 'a': [1, 2, 2]}) key的value是set類型的字典: defaultdict(<class 'set'>, {'b': {4}, 'a': {1, 2}}) >>>
關(guān)于defaultdict需要注意的一點(diǎn),他會(huì)自動(dòng)創(chuàng)建字典表項(xiàng)以待稍后的訪問(wèn)(即使這些表項(xiàng)當(dāng)前在字典中還沒(méi)有找到)。
如果想取消這個(gè)功能,可以在普通的字典上調(diào)用setdefault()
方法來(lái)取代,例如:
d={} #一個(gè)普通的字典 d.setdefault('a',[]).append(1) d.setdefault('a',[]).append(2) d.setdefault('a',[]).append(2) d.setdefault('b',[]).append(4) >>>
key的value是list類型的字典:
{'a': [1, 2, 2], 'b': [4]}
補(bǔ)充:
構(gòu)建一個(gè)一鍵多值的字典很容易,但是如果試著自己對(duì)第一個(gè)值做初始化操作,這個(gè)會(huì)變得很雜亂,如果使用defaultdic后代碼會(huì)簡(jiǎn)潔很多:
pairs={'a':[22,44],'b':[88]} d=defaultdict(list) for key,value in pairs.items(): d[key].append(value) print (d) >>> defaultdict(<class 'list'>, {'a': [[22, 44]], 'b': [[88]]}) >>>
(代碼摘自《Python Cookbook》)
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
詳解Python中range()與xrange()的區(qū)別
range()?和?xrange()?是兩個(gè)函數(shù),可用于在?Python的?for?循環(huán)中迭代一定次數(shù)。本文將通過(guò)示例詳細(xì)說(shuō)說(shuō)二者的區(qū)別與使用,需要的可以參考一下2022-09-09python 按照sheet合并多個(gè)Excel的示例代碼(多個(gè)sheet)
這篇文章主要介紹了python 按照sheet合并多個(gè)Excel的示例代碼(多個(gè)sheet),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Linux下把Python3設(shè)為默認(rèn)Python版本的三種方法
這篇文章主要給大家介紹了關(guān)于Linux下把Python3設(shè)為默認(rèn)Python版本的三種方法,在大部分開(kāi)發(fā)過(guò)程中,我們需要使用到python3進(jìn)行測(cè)試,于是下載安裝python3,近乎是一種剛需,至于設(shè)置默認(rèn)python指向python3可以參考本文2023-09-09詳解python關(guān)于多級(jí)包之間的引用問(wèn)題
本文主要介紹了python關(guān)于多級(jí)包之間的引用問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08python PaddleOCR庫(kù)用法及知識(shí)點(diǎn)詳解
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python PaddleOCR庫(kù)用法及知識(shí)點(diǎn)詳解內(nèi)容,對(duì)此有需要的朋友們可以學(xué)習(xí)參考下。2021-07-07python skimage 連通性區(qū)域檢測(cè)方法
今天小編就為大家分享一篇python skimage 連通性區(qū)域檢測(cè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python實(shí)現(xiàn)word2Vec model過(guò)程解析
這篇文章主要介紹了Python實(shí)現(xiàn)word2Vec model過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12