Python多层结构练习题

原结构

industry_list = [
  {
     "parent_ind" : "女装",
     "name" : "连衣裙"
  },
  {
     "name": "女装"
  },
  {
     "parent_ind" : "女装",
     "name" : "半身裙"
  },
  {
     "parent_ind" : "女装",
     "name" : "A字裙"
  },
  {
     "name": "数码"
  },
  {
    "parent_ind" : "数码",
     "name": "电脑配件"
  },
  {
    "parent_ind" : "电脑配件",
     "name": "内存"
  },
]

为了取用方便,我们希望可以将其转换为树状格式,例如

{
  "数码": {
    "电脑配件": {
        "内存" : {}
     }
  },
  "女装" : {
     "连衣裙": {},
    "半身裙": {},
    "A字裙": {}
  }
}
实现一个方法完成这个转换
def convert_format(data)

实现一个方法完成这个转换

lst1 = []
lst2 = []
d = {}
def convert_format(data):

    for dic in data:
        if not dic.get("parent_ind"):
            d[dic["name"]] = {}
        else:
            lst1.append(dic)
    for dic in lst1:
        if dic['parent_ind'] in d:
            d[dic.get('parent_ind')][dic['name']] = {}
        else:
            lst2.append(dic)
    for dic in lst2:
        for t in d.values():
            if dic['parent_ind'] in t:
                t[dic['parent_ind']][dic['name']] = {}
    return d

print(convert_format(industry_list))

2. 递归简单实现

dirs = {"C":"NULL",
        "D":{"D1":"NULL",
             "D2":{"D2_1":"NULL"}},
        "E":{"E1":{"E1_1":{"E1_1_1":"NULL"},
             "E1_2":"NULL"},
             "E2":"NULL"}
        }
def dirnames(dirs):
    """
    这个函数用于将上述定义的 dirs 中的每一个 key 和子元素中的 key
    取出并打印出来如:依次输出 C、D、D1、D2_1、D……	请补全代码。
    """

    # 第一种方法
    # for key,values in dirs.items():
    #     print(key)
    #     if type(values) == dict:
    #         dirnames(values)

    # 第二种方法
    for k, v in dirs.items():
        print(k)
        # isinstance(a,b) 判断a类是否是b类的子类或继承b类
        # issubclass(a,b) 判断a是否是b类或b类的子类的实例对象
        if isinstance(v, dict):
            dirnames(v)

dirnames(dirs)
posted @ 2020-04-05 16:22  lvweihe  阅读(685)  评论(0编辑  收藏  举报