• 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
    

    (二)嵌套字典的遍历

    (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嵌套字典/

  • 相关阅读:
    SQL中的escape 将通配符 变成普通符号
    shell 变量
    vi 常用命令
    Java 内存模型基础
    Linux 的文件权限与目录配置
    Mybatis 源码分析之事物管理
    Mybatis 源码分析之一二级缓存
    Mybatis源码分析之结果集处理
    从JDBC看Mybatis的设计
    Mybatis源码分析之插件的原理
  • 原文地址:https://www.cnblogs.com/flightless/p/12734807.html
Copyright © 2020-2023  润新知