#python #python-3.x #list
Вопрос:
Я хочу фильтровать вложенные списки на основе первого элемента в каждом списке. У меня есть следующие вложенные списки:
# 'nom' is duplicated
input1 = [
['nom', 'N', 'eye'],
['nom', 'N', 'face'],
['acc', 'E', 'computer'],
['dat', 'C', 'screen']
]
# 'acc' is duplicated
input2 = [
['nom', 'O', 'heart'],
['acc', 'O', 'root'],
['acc', 'C', 'life'],
['dat', 'E', 'evidence']
]
# No duplicates
input3 = [
['nom', 'O', 'author'],
['acc', 'O', 'tear'],
]
Для каждого родительского списка я хотел бы найти дочерние списки, первый элемент которых одинаков, и сохранить первый дочерний список в выходных данных. Поэтому я хочу получить следующий результат:
# From input1
# keep ['nom', 'N', 'eye']
# delete ['nom', 'N', 'face']
output1 = [
['nom', 'N', 'eye'],
['acc', 'E', 'computer'],
['dat', 'C', 'screen']
]
# From input2
# keep ['acc', 'O', 'root']
# delete ['acc', 'C', 'life']
output2 = [
['nom', 'O', 'heart'],
['acc', 'O', 'root'],
['dat', 'E', 'evidence']
]
# From input3
# keep every child list since there is no duplicate
output3 = [
['nom', 'O', 'author'],
['acc', 'O', 'tear'],
]
Как я должен добиться этого с помощью python3?
Ответ №1:
Если вы используете Python 3.6 или новее, вы можете использовать тот факт, что dict
сохраняете порядок вставки. Повторите список в обратном порядке и вставьте его в a dict
, а затем измените значения
def filter_list(lst):
d = {lst[i][0]: lst[i] for i in range(len(lst) - 1, -1, -1)}
return list(reversed(d.values()))
input1 = filter_list(input1)
print(input1) # [['nom', 'N', 'face'], ['acc', 'E', 'computer'], ['dat', 'C', 'screen']]