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}}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值