Python: list matching
本问题已经有最佳答案,请猛点这里访问。
我有一个列表的格式,其中包含父级的ID、ID和名称,就像级联样式。
我的输入如下:
1 | category = [['id','name','parent_id'],[1, 'Root', 0],[10, 'Beans', 4],[2, 'Sub Root', 1],[3, 'Fruits', 2],[4, 'Veg', 2],[5, 'Apple', 3],[6, 'Onion', 4]] |
我的例外输出如下
1 | out_category = [[1, 'Root', 0],[2, 'Sub Root', 1],[3, 'Fruits', 2],[4, 'Veg', 2],[5, 'Apple', 3],[6, 'Onion', 4],[10, 'Beans', 4]] |
号
我试过了
1 2 3 4 5 6 | out_category = [] for item in category[1:]: print item[0].split(',') categ = item[0].split(',') out_category.append(filter(lambda x: x[0]==categ[2],categ)) print out_category |
用
1 | sorted(filter(lambda x: isinstance(x[0], int), category), key=lambda x: x[0]) |
如果很难理解,则分为两行:
1 2 3 4 5 6 7 8 9 | # Remove titles (first element of category) without_first_string_list = filter(lambda x: isinstance(x[0], int), category) # Or you can use if this list always have only one list with titles, # but if not, the sorting may be incorrect without_first_string_list = category[1:] # Sort by first item sorted_list = sorted(without_first_string_list, key=lambda x: x[0]) |
号
无论如何,如果要排除输出中的第一个列表,然后根据每个嵌套列表中的第一个元素进行排序,最简单的解决方案是:
1 | out_category = sorted(category[1:]) |
。
如果要按任何列表索引(
1 | out_category = sorted(category[1:], key=lambda x : x[0]) |
或者,您可以在列表理解中非常容易地做到这一点:
1 | sorted([item for item in category if type(item[0])==int]) |