天天看點

python字典嵌套字典構造_Python字典嵌套字典

最近總是在python中遇到類似map>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}}