Удалить дубли из списка
Как из списка удалить дубли по 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, в словаре по определению не могут повторяться ключи, сохраняется только последнее значение при повторах ключей. Далее из этого словаря берутся значения и превращаются в список (значения словаря - это специальный объект, поэтому их нужно явно преобразовывать в список).