最近總是在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}}
如