Это один подход с использованием модуля collections
.
Ex:
from collections import defaultdict, OrderedDict
listA = [
["4YBB|1|AA|A|262", "4YBB|1|AA|A|263", 'empty', "s35", 'empty', 'empty'],
["4YBB|1|AA|U|261", "4YBB|1|AA|A|263", "tSH", 'empty', 'empty', 'empty'],
["4YBB|1|AA|U|261", "4YBB|1|AA|C|264", "ntSH", 'empty', "5BPh", 'empty'],
["4YBB|1|AA|G|259", "4YBB|1|AA|C|267", "cWW", 'empty', 'empty', 'empty'],
["4WOI|1|DA|A|262", "4WOI|1|DA|A|263", 'empty', "s35", 'empty', 'empty'],
["4WOI|1|DA|C|264", "4WOI|1|DA|G|265", 'empty', "s35", 'empty', 'empty']
]
identifiers = ["4YBB|1|AA", "4WOI|1|DA"]
result = defaultdict(list)
for i in listA:
key = i[0].rsplit('|', 2)[0] #Get Key
if key in identifiers: #Check in identifiers
result[key].append(i) #Group
result = OrderedDict(sorted(result.items(), key=lambda x: identifiers.index(x[0]))) #Sort base on identifiers
print(result.values())
Выход:
[[['4YBB|1|AA|A|262', '4YBB|1|AA|A|263', 'empty', 's35', 'empty', 'empty'],
['4YBB|1|AA|U|261', '4YBB|1|AA|A|263', 'tSH', 'empty', 'empty', 'empty'],
['4YBB|1|AA|U|261', '4YBB|1|AA|C|264', 'ntSH', 'empty', '5BPh', 'empty'],
['4YBB|1|AA|G|259', '4YBB|1|AA|C|267', 'cWW', 'empty', 'empty', 'empty']],
[['4WOI|1|DA|A|262', '4WOI|1|DA|A|263', 'empty', 's35', 'empty', 'empty'],
['4WOI|1|DA|C|264', '4WOI|1|DA|G|265', 'empty', 's35', 'empty', 'empty']]]
Просто к вашему сведению. Использование itertools.groupby
from itertools import groupby
listA = [
["4YBB|1|AA|A|262", "4YBB|1|AA|A|263", 'empty', "s35", 'empty', 'empty'],
["4YBB|1|AA|U|261", "4YBB|1|AA|A|263", "tSH", 'empty', 'empty', 'empty'],
["4YBB|1|AA|U|261", "4YBB|1|AA|C|264", "ntSH", 'empty', "5BPh", 'empty'],
["4YBB|1|AA|G|259", "4YBB|1|AA|C|267", "cWW", 'empty', 'empty', 'empty'],
["4WOI|1|DA|A|262", "4WOI|1|DA|A|263", 'empty', "s35", 'empty', 'empty'],
["4WOI|1|DA|C|264", "4WOI|1|DA|G|265", 'empty', "s35", 'empty', 'empty']
]
identifiers = ["4YBB|1|AA", "4WOI|1|DA"]
result = [list(value) for k, value in groupby(sorted(listA, key=lambda x: x[0].rsplit('|', 2)[0]), lambda x: x[0].rsplit('|', 2)[0]) if k in identifiers]
print(result)