Очень похоже на Как вы удаляете дубликаты из списка при сохранении порядка? , но просто «переносите» второй элемент, не включая его в хэш / сравнение / что угодно.
Два способа сделать это:
Либо использовать маркер, установленный для записи вхождений первых значений:
list_values=[("10",1),("10",2),("16",2),("16",1),("15",1)]
seen = set()
seen_add = seen.add
result = []
for k,v in list_values:
if k not in seen:
seen_add(k)
result.append([k,v])
print(result)
выходы (сохраняет порядок):
[['10', 1], ['16', 2], ['15', 1]]
или используйте словарь для обращенных элементов, чтобы сохранить только первое значение:
result = list(dict(reversed(list_values)).items())
print(result)
выход (не сохранит порядок):
[('15', 1), ('10', 1), ('16', 2)]
Использование collections.OrderedDict
и обратноеdouble позволяет также сохранить порядок
import collections
result = list(reversed(list(collections.OrderedDict(reversed(list_values)).items())))
приводит к:
[('10', 1), ('16', 2), ('15', 1)]
То есть, если не используется Python 3.6+, где словари сохраняют порядок вставки.Из python 3.5 вы можете удалить некоторые принудительные преобразования списка, чтобы они работали:
list(reversed(collections.OrderedDict(reversed(list_values)).items()))