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)