zoukankan      html  css  js  c++  java
  • 列表生成式,数据格式处理

    permission_queryset = [
        {
            'permissions__id': 1,
            'permissions__title': '用户列表',
            'permissions__url': '/user/',
            'permissions__name': 'user',
            'permissions__menu_id': 1,
            'permissions__menu__title': '用户管理',
            'permissions__menu__icon': 'fs'
        }, {
            'permissions__id': 2,
            'permissions__title': '添加用户',
            'permissions__url': '/user/add/',
            'permissions__name': 'user_add',
            'permissions__menu_id': 1,
            'permissions__menu__title': '用户管理',
            'permissions__menu__icon': None
        }, {
            'permissions__id': 3,
            'permissions__title': '编辑用户',
            'permissions__url': '/user/edit/(\d+)',
            'permissions__name': 'user_edit',
            'permissions__menu_id': 2,
            'permissions__menu__title': '信息管理',
            'permissions__menu__icon': None
        }, {
            'permissions__id': 4,
            'permissions__title': '删除用户',
            'permissions__url': '/user/del/(\d+)',
            'permissions__name': 'user_del',
            'permissions__menu_id': 2,
            'permissions__menu__title': '信息管理',
            'permissions__menu__icon': None
        }, {
            'permissions__id': 5,
            'permissions__title': '删除用户',
            'permissions__url': '/user/del/(\d+)',
            'permissions__name': 'user_del',
            'permissions__menu_id': None,
            'permissions__menu__title': 'None',
            'permissions__menu__icon': None
        }
    ]
    
    # 将他变为下面格式的数据
    # 保留有permissions__menu_id的字典,permissions__menu_id最为字典的key,和菜单相关的作为字典外层数据,其他放到children列表中
    {
    	1: {
    		'title': '用户管理',
    		'icon': None,
    		'children': [{
    			'title': '用户列表',
    			'name': 'user',
    			'url': '/user/'
    		}, {
    			'title': '添加用户',
    			'name': 'user_add',
    			'url': '/user/add/'
    		}]
    	},
    	2: {
    		'title': '信息管理',
    		'icon': None,
    		'children': [{
    			'title': '编辑用户',
    			'name': 'user_edit',
    			'url': '/user/edit/(\d+)'
    		}, {
    			'title': '删除用户',
    			'name': 'user_del',
    			'url': '/user/del/(\d+)'
    		}]
    	}
    }
    
    
    # 推荐的写法
    
     for row in permission_queryset: 
            permission_dict[row['permissions__name']] = {'url': row['permissions__url']}
            if row['permissions__menu_id']:
                if row['permissions__menu_id'] not in menu_dict:	# children中是新增数据还是追加数据取决于字典相应的key是否已经存在(添加),所以根据这个依据进行判断
                    menu_dict[row['permissions__menu_id']] = {'title': row['permissions__menu__title'],
                                                              'icon': row['permissions__menu__icon'],
                                                              'children':[
                                                                  {"title": row['permissions__title'],
                                                                   "name": row['permissions__name'],
                                                                   "url": row["permissions__url"],
                                                                   }], }
                else:
                    menu_dict[row['permissions__menu_id']]['children'].append( {"title": row['permissions__title'],
                                                                   "name": row['permissions__name'],
                                                                   "url": row["permissions__url"],
                                                                   })
    
    															   
    															   
    # 我的很low的写法															   
    permission_dict = {row["permissions__menu_id"]: {"title": row["permissions__menu__title"],
                                                     "icon": row["permissions__menu__icon"],
                                                     "children": [],                                           
                                                        
                                                     } for row in permission_queryset if row["permissions__menu_id"]}
    
    for row in permission_queryset:
        if row["permissions__menu_id"]:
            print(row["permissions__id"])
            for permission_id in permission_dict:
                if row["permissions__menu_id"] == permission_id:
                    print(permission_id)
                    permission_dict[permission_id]["children"].append({"title": row["permissions__title"],
                                                                       "name": row["permissions__name"],
                                                                       "url": row["permissions__url"],
                                                                       })
    
    print(permission_dict)															   
    															   
    															   
    

      

    另一种写法

    menu_dict = defaultdict(lambda: {'children': []})
    
    for row in permission_queryset:
        if row['permissions__menu_id']:
            menu_dict[row['permissions__menu_id']].setdefault('title', row['permissions__menu__title'], )
            menu_dict[row['permissions__menu_id']].setdefault('icon', row['permissions__menu__icon'], )
            menu_dict[row['permissions__menu_id']]['children'].append({"title": row['permissions__title'],
                                                                       "name": row['permissions__name'],
                                                                       "url": row["permissions__url"],
                                                                       })
    print(dict(menu_dict))
    

      

    def quicksortshort(arr):
    	return [] if arr==[] else quicksortshort([y for y in arr[1:] if y<arr[0]]) + [arr[0]]+ quicksortshort([y for y in arr[1:] if y>=arr[0]])
    一行代码写快排
    

      

    # 简单的列表生成式
    li = [ x for x in range(10)]
    print(li)
    dic = { y:y*y for y in li }
    print(dic)
    
    
    # 列表生成式间的嵌套
    dic = { y:y*y for y in [ x for x in range(10)] }
    li = [ y*y for y in [ x for x in range(10)] ]
    print(dic)
    print(li)
    

      

  • 相关阅读:
    SAP系统和微信集成的系列教程之十:如何在SAP C4C系统里直接回复消息给微信用户
    SAP系统和微信集成的系列教程之九:如何将微信用户发送给微信公众号的内容自动转存到SAP C4C系统
    SAP系统和微信集成的系列教程之八:100行代码在微信公众号里集成地图搜索功能
    漫谈SAP产品里页面上的Checkbox设计与实现系列之一
    一个SAP成都研究院开发工程师的2020年度总结:未知生,焉知死
    Angular form控件原生HTML代码里ng-reflect-form属性和其值的生成时机
    一个SAP成都研究院开发工程师2020年所有文章列表
    SAP系统和微信集成的系列教程之七:使用Redis存储微信用户和公众号的对话记录
    用shell脚本从git上拉取,项目目录下所有各个子项目代码
    shell脚本小计
  • 原文地址:https://www.cnblogs.com/perfey/p/9966102.html
Copyright © 2011-2022 走看看