У Вас есть список объектов, и каждый из них имеет id
свойство.
Вот является мой путь к убежищу этим к dict, где ключи являются идентификаторами, и значения являются объектами:
reduce(
lambda x,y: dict(x.items() + { y.id : y}.items()),
list,
{}
)
Предложите лучший способ сделать это.
В Python 3.x:
object_dict = {x.id: x for x in object_list}
В Python 3.x и Python 2.4 +:
object_dict = dict((x.id, x) for x in object_list)
(x.id, x) для x в object_list
является генератором понимание (и, что хорошо, его не нужно заключать в круглые скобки, как понимание списка должно быть заключено в скобки, если оно используется в качестве единственного аргумента для вызова; конечно, это означает, что в других обстоятельствах выражение, которое я использовал, должно быть ((x.id, x) для x в object_list)
). В отличие от понимания списка, он не будет генерировать фактический список всех элементов и, таким образом, более эффективен в таких ситуациях, как эта.
Кстати, Python имеет встроенный метод id ()
:
Возвращает «идентичность» объекта. Это целое число, которое гарантированно будет уникальным и постоянным для этого объекта в течение его жизни. Два объекта с неперекрывающимся временем жизни могут иметь одинаковое значение id (). (Примечание по реализации: это адрес объекта.)
Итак, если вы хотите, чтобы Python обрабатывал идентификаторы самостоятельно, вы можете сделать это как:
object_dict = {id(x): x for x in object_list}
или
object_dict = dict((id(x), x) for x in object_list)