本文實例講述了Python在字典中將鍵映射到多個值上的方法。分享給大家供大家參考,具體如下:
問題:一個能將鍵(key)映射到多個值的字典(即所謂的一鍵多值字典[multidict])
解決方案:如果想讓鍵映射到多值,需要將這多個值保持到另一個容器如列表或集合中;
>>> 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]}>>>更方便的創建這樣的字典是利用collections模塊中的defaultdict類。defaultdict的一個特點是它會自動給字典初始化第一個值,這樣只需添加元素即可。例如:
from collections import defaultdictd=defaultdict(list) #創建一鍵多值的字典,key的value是list類型d['a'].append(1)d['a'].append(2)d['a'].append(2)d['b'].append(4)c=defaultdict(set) #創建一鍵多值的字典,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}})>>>關于defaultdict需要注意的一點,他會自動創建字典表項以待稍后的訪問(即使這些表項當前在字典中還沒有找到)。
如果想取消這個功能,可以在普通的字典上調用setdefault()方法來取代,例如:
d={} #一個普通的字典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]}補充:
構建一個一鍵多值的字典很容易,但是如果試著自己對第一個值做初始化操作,這個會變得很雜亂,如果使用defaultdic后代碼會簡潔很多:
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》)
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
新聞熱點
疑難解答