Python字典嵌套字典

最近总是在python中遇到类似map<int,map<string,int>>mp的表达式,python中应如何表达这一内容呢?

(一) 嵌套字典的生成

两个维度的字典

from collections import defaultdict
d = defaultdict(defaultdict)
d[1][2] = 3
#构造时先判断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

(二)嵌套字典的遍历

(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。整个过程即将字典数据结构扁平化为元祖

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

上一篇:python 设置默认字典


下一篇:collections模块