Python: список соответствия

У меня есть формат списка списков с parent_id, id и name, как в стиле каскада.

Мой вклад выглядит следующим образом:

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]]

И мой исключенный вывод следует как

out_category = [[1, 'Root', 0],[2, 'Sub Root', 1],[3, 'Fruits', 2],[4, 'Veg', 2],[5, 'Apple', 3],[6, 'Onion', 4],[10, 'Beans', 4]]

Я пытался до сих пор

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

3 ответа

Использование filter для удаления не int а также sorted с key для поиска по первому элементу:

sorted(filter(lambda x: isinstance(x[0], int), category), key=lambda x: x[0])

Если это трудно понять, в двух строках это выглядит так:

# 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])

В качестве альтернативы вы могли бы сделать это довольно читабельно в понимании списка:

sorted([item for item in category if type(item[0])==int])

category выглядит как выход csv модуль. Если это так, вы можете пропустить заголовки при разборе, прочитав и отбросив первую строку, прежде чем читать оставшуюся часть файла.

В любом случае, если вы хотите исключить первый список в выводе, а затем отсортировать по первому элементу в каждом вложенном списке, простейшим решением будет следующее:

out_category = sorted(category[1:])

Если вы хотите отсортировать по любому списку индекса (x[0], x[1] или же x[2]), ты можешь использовать sorted и передать lambda как key:

out_category = sorted(category[1:], key=lambda x : x[0]) 
Другие вопросы по тегам