您有对象列表,每个对象都有id
属性。
这是我将其转换为dict的方式,其中键是id,值是对象:
reduce(
lambda x,y: dict(x.items() + { y.id : y}.items()),
list,
{}
)
建议更好的方法。
答案 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))