Ответ 1
В 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)