Python字典嵌套字典


最近總是在python中遇到類似map<int,map<string,int>>mp的表達式,python中應如何表達這一內容呢?

(一) 嵌套字典的生成

兩個維度的字典

from collections import defaultdict
d = defaultdict(defaultdict)
#構造時先判斷key對應的value值在不在
if 2 not in d[1]:
    d[1][2]=1
else:
    d[1][2]+=1

更多維度的字典

from collections import defaultdict
d = defaultdict(lambda :defaultdict(defaultdict))
d[1][2][3] = 4

如果字典中是列表,構造方式應為:

dic.setdefault(key,[]).append(value)

(二)嵌套字典的遍歷

(2.1)一層層遍歷

for key,value in d.items():
    for key2, val2 in value.items():
        print (key2, val2)

(2.2)使用類中定義的walk方法

該種方法生成嵌套字典的方法如下:

#定義類
class Vividict(dict):
	def __missing__(self, key):
		value = self[key] = type(self)()
		return value
#實例化
d = Vividict()
d[2][3]=4
class Vividict(dict):
	def __missing__(self, key):
		value = self[key] = type(self)()
		return value
	def walk(self):
		for key, value in self.items():
			if isinstance(value, Vividict):
				for tup in value.walk():
					yield (key,) + tup
			else:
				yield key, value

第5-11行:定義一個walk函數,並對字典items對象的key和value進行遍歷,isinstance用於判斷對象類型,如果value是一個字典,那么對value調用walk()方法繼續進行遍歷,一層一層將key,value存儲在元祖中()。當最里面一層,即else情況,輸出key,value。整個過程即將字典數據結構扁平化為元祖

字典的value值是列表

有時候需要某一鍵值對應一個列表。用setdefault默認鍵值不存在時生成一個列表

def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        n=len(strs)
        d={}
        for i in strs:
            d.setdefault(str(sorted(i)),[]).append(i)
        res=[]
        for v in d.values():
            res.append(v)
        return res

字典的value值是字典

dic={}
dic.setdefault(key,{})[value]=1

dic.setdefault('b',{})['a']=1
dic.setdefault('b',{})['c]=2
輸出:
{'b':{'a':1,'c':2}}
如

參考博客:
https://anjingwd.github.io/AnJingwd.github.io/2017/08/19/如何優雅的生成python嵌套字典/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM