Ваш пример может быть слегка переписан для построения первого словаря с использованием выражения генератора и для устранения необходимости построения других отображений. Просто используйте старые:
def unique_mapping(mappings):
return dict((m['id'], m) for m in mappings).values()
Несмотря на то, что это было однострочно, я все же думаю, что оно вполне читабельно.
Есть две вещи, которые вы должны иметь в виду при использовании вашего исходного решения и моего:
- предметы не всегда будут возвращены в том же порядке, в котором они были изначально
- более поздняя запись перезапишет предыдущие записи с тем же идентификатором
Если вы не возражаете, я предлагаю решение выше. В другом случае эта функция сохраняет порядок и обрабатывает первичные идентификаторы с приоритетом:
def unique_mapping(mappings):
addedIds = set()
for m in mappings:
mId = m['id']
if mId not in addedIds:
addedIds.add(mId)
yield m
Вам может потребоваться позвонить по номеру list(unique_mappings(mappings))
, если вам нужен список, а не генератор.