列表生成式,数据格式处理
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)
浙公网安备 33010602011771号