Вы можете использовать groupby
для группировки соседних элементов по общему признаку.Применяя это на каждом «уровне» ваших объектов, вы можете сделать что-то вроде:
from operator import itemgetter
from itertools import groupby
def groupby_attributes(l):
for surname, surname_group in groupby(l, key=itemgetter(0)):
print("Surname: {}".format(surname))
for name, name_group in groupby(surname_group, key=itemgetter(1)):
print("Name: {}".format(name))
for base, base_group in groupby(name_group, key=itemgetter(2)):
print("Base: {}".format(base))
for description in map(itemgetter(3), base_group):
print("Description: {}".format(description))
groupby_attributes([
["surname1", "name1", "A", "Desc1"],
["surname1", "name1", "A", "Desc1"],
["surname1", "name1", "B", "Desc1"],
["surname1", "name2", "A", "Desc1"],
["surname2", "name1", "A", "Desc1"],
["surname2", "name1", "B", "Desc1"],
])
print
Surname: surname1
Name: name1
Base: A
Description: Desc1
Description: Desc1
Base: B
Description: Desc1
Name: name2
Base: A
Description: Desc1
Surname: surname2
Name: name1
Base: A
Description: Desc1
Base: B
Description: Desc1