идея состоит в том, чтобы сделать ваши структуры хешируемыми , не разрушая их слишком сильно, чтобы вы могли восстановить их такими, какими они были.
Вы можете преобразовать свои словари в dict_items
, а затем вtuples
(теперь мы можем поместить это в set
, потому что данные можно хэшировать), применить к нему set
и преобразовать обратно в словарь:
input_list = [{"name":"name1","id":"id1"},{"name":"name2","id":"id2"},
{"name":"name1","id":"id1"}]
output_list = [dict(items) for items in {tuple(a.items()) for a in input_list}]
Это работает, потому что значения подпрограммы-дикты являются хэшируемыми (строки).Если бы они были словарями, мы бы тоже их конвертировали.
результат:
[{'id': 'id1', 'name': 'name1'}, {'id': 'id2', 'name': 'name2'}]
другое решение (от Jon Clements), которое не использует set
, но создаетсловарь (с использованием словарного понимания) & использует уникальность ключа для дублирования дубликатов, а затем извлекает только значения:
list({tuple(d.items()):d for d in input_list}.values())