Удалить дубли из списка

Как из списка удалить дубли по id?

cars = []
for item in items:
    cars.append({
        'id': item['id'],
        'name': item['name'],
    })
    
return cars

Ответы (3 шт):

Автор решения: Zhihar

если важно и id и name, то можно сделать в лоб через str:

cars_hashes = set()

res = []

for car in cars:
    car_hash = str(car)
    if car_hash not in cars_hashes:
        cars_hashes.add(car_hash)
        res.append(car)
→ Ссылка
Автор решения: Jack_oS

В cars изначально можно не добавлять дубликаты: используйте вспомогательный список (множество, как у Zhihar) для хранения встречавшихся id, и при повторе id просто не добавляйте словарь в свой res:

ids_set = set()
cars = []

for item in items:
    if item['id'] not in ids_set:
        ids_set.add(item['id'])
        cars.append({
            'id': item['id'],
            'name': item['name'],
        })

return cars

Или так:

ids_list = []
cars = []

for item in items:
    if item['id'] in ids_list:
        continue

    ids_list.append(item['id'])
    cars.append({
        'id': item['id'],
        'name': item['name'],
    })



return cars
→ Ссылка
Автор решения: CrazyElf

Отобрать уникальные по id items можно так:

uniq_id_items = list({item['id']:item for item in items}.values())

Т.е. делается словарь с ключом id и значением item, в словаре по определению не могут повторяться ключи, сохраняется только последнее значение при повторах ключей. Далее из этого словаря берутся значения и превращаются в список (значения словаря - это специальный объект, поэтому их нужно явно преобразовывать в список).

→ Ссылка