以下是一个示例代码,展示了如何按照数据属性和父子关系对li进行排序:
def sort_li(li):
# 根据数据属性排序
li.sort(key=lambda x: x['data_attribute'])
# 构建父子关系字典
parent_dict = {}
for item in li:
parent_dict[item['id']] = item['parent_id']
# 根据父子关系对li进行排序
sorted_li = []
for item in li:
if item['parent_id'] is None:
sorted_li.append(item)
sort_children(item, li, parent_dict, sorted_li)
return sorted_li
def sort_children(parent, li, parent_dict, sorted_li):
children = [item for item in li if parent_dict[item['id']] == parent['id']]
children.sort(key=lambda x: x['data_attribute'])
for child in children:
sorted_li.append(child)
sort_children(child, li, parent_dict, sorted_li)
# 示例数据
li = [
{'id': 1, 'parent_id': None, 'data_attribute': 'b'},
{'id': 2, 'parent_id': 1, 'data_attribute': 'a'},
{'id': 3, 'parent_id': 2, 'data_attribute': 'c'},
{'id': 4, 'parent_id': None, 'data_attribute': 'a'},
{'id': 5, 'parent_id': 4, 'data_attribute': 'b'},
{'id': 6, 'parent_id': 5, 'data_attribute': 'c'},
{'id': 7, 'parent_id': 4, 'data_attribute': 'a'}
]
sorted_li = sort_li(li)
print(sorted_li)
输出结果:
[
{'id': 4, 'parent_id': None, 'data_attribute': 'a'},
{'id': 7, 'parent_id': 4, 'data_attribute': 'a'},
{'id': 5, 'parent_id': 4, 'data_attribute': 'b'},
{'id': 6, 'parent_id': 5, 'data_attribute': 'c'},
{'id': 1, 'parent_id': None, 'data_attribute': 'b'},
{'id': 2, 'parent_id': 1, 'data_attribute': 'a'},
{'id': 3, 'parent_id': 2, 'data_attribute': 'c'}
]
这个示例代码首先根据数据属性对li进行排序,然后使用一个字典来构建父子关系。最后,按照父子关系对li进行排序,并将排序后的结果存储在sorted_li列表中。