В 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) for x in object_list
- это генераторное понимание (и, к счастью, его не нужно заключать в скобки, так как понимание списка необходимо заключать в скобки, если оно используется в качестве единственного аргумента для вызова; конечно, это означает, что что в других обстоятельствах выражение, которое я использовал, должно быть ((x.id, x) for x in 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)