Уменьшите список объектов Python к dict object.id-> объект

У Вас есть список объектов, и каждый из них имеет id свойство.

Вот является мой путь к убежищу этим к dict, где ключи являются идентификаторами, и значения являются объектами:

reduce(
  lambda x,y: dict(x.items() + { y.id : y}.items()),
  list,
  {}
)

Предложите лучший способ сделать это.

36
задан alex 9 August 2018 в 20:49
поделиться

3 ответа

В 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)
69
ответ дан 27 November 2019 в 05:31
поделиться
dict([(x.id, x) for x in list])
11
ответ дан 27 November 2019 в 05:31
поделиться
dict(map(lambda x: [x.id, x], list))
6
ответ дан 27 November 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: