跳转底部

列表生成式,数据格式处理

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)

  

posted on 2018-11-15 21:13  afly666  阅读(156)  评论(0编辑  收藏  举报

导航

回到顶部