列表生成式,資料格式處理
阿新 • • 發佈:2018-11-15
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)
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)