将对象列表减少为object.id的dict - >宾语

时间:2010-06-18 14:03:08

标签: python lambda dictionary

您有对象列表,每个对象都有id属性。

这是我将其转换为dict的方式,其中键是id,值是对象:

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

建议更好的方法。

3 个答案:

答案 0 :(得分:59)

在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自己处理id,你可以这样做:

object_dict = {id(x): x for x in object_list}

object_dict = dict((id(x), x) for x in object_list)

答案 1 :(得分:9)

dict([(x.id, x) for x in list])

答案 2 :(得分:4)

dict(map(lambda x: [x.id, x], list))