zoukankan      html  css  js  c++  java
  • 基于可迭代数据生成一维字典

    def get_path(data, value, flag=True):
        """
        :param data: 被查找的数据
        :param value: 要查的数据
        :param flag: False:模糊查找,True:精确查找
        :return:
        """
        dt = gen_dict(data)
        paths = []
        for k, v in dt.items():
            if not isinstance(v, str) or not isinstance(v, str) or flag:
                if v == value:
                    paths.append(k)
            else:
                if value in v:
                    paths.append(k)
        return paths
    
    
    def gen_dict(data):
        dt = dict()
        if data:
            if isinstance(data, dict):
                for key, value in data.items():
                    if isinstance(value, dict) or isinstance(value, tuple) or isinstance(value, list):
                        nt = gen_dict(value)
                        for k, v in nt.items():
                            dt[f"{key}.{k}"] = v
                    else:
                        dt[key] = value
            elif isinstance(data, tuple) or isinstance(data, list):
                for i, value in enumerate(data):
                    if isinstance(value, dict) or isinstance(value, tuple) or isinstance(value, list):
                        nt = gen_dict(value)
                        for k, v in nt.items():
                            dt[f"{i}.{k}"] = v
                    else:
                        dt[i] = value
            else:
                dt["unknown"] = data
        return dt
    
    
    data = {
        "s": "5",
        "t": ["5", "3", "5", {"name": "5"}]
    }
    print(gen_dict(data))
    print(get_path(data, "5"))
    

      

  • 相关阅读:
    开启linux服务器防火墙
    Linux系统编程11_管道和命名管道
    Lua语法
    Git学习
    Buildroot介绍
    Makefile基本介绍
    页、页表和块
    文件系统,根文件系统,MTD
    什么是ioctl
    bootargs的mtdparts解析
  • 原文地址:https://www.cnblogs.com/navysummer/p/15723642.html
Copyright © 2011-2022 走看看