将Python对象列表简化为对象.id -> 对象的字典

60 投票
3 回答
72439 浏览
提问于 2025-04-16 00:08

你有一个对象的列表,每个对象都有一个 id 属性。

下面是我将这个列表转换成字典的方法,字典的键是这些 id,值是对应的对象:

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

如果有更好的方法,请推荐一下。

3 个回答

7

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这个时候,我们可以去一些技术论坛,比如StackOverflow,寻找解决方案。在这些论坛上,很多人会分享他们的经验和解决方法。

通常,问题会被详细描述,包括出现的错误信息和代码示例。其他人看到这些问题后,会提供他们的建议和解决方案。通过这种方式,大家可以互相帮助,解决各种编程上的难题。

总之,StackOverflow是一个很好的地方,可以让你学习到很多编程知识,也能让你在遇到问题时找到帮助。

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

当然可以!请看下面的内容:

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常会把它们转换成一种特定的格式,这样程序才能更容易地使用它们。

比如说,如果你有一个用户输入的字符串,里面包含了一些数字和字母,你可能需要把这些字符串转换成数字,才能进行数学运算。这个过程就叫做“数据转换”。

另外,程序在运行时可能会遇到一些错误,比如输入的数据格式不对,或者文件找不到。这时候,程序需要能够处理这些错误,避免崩溃。我们通常会使用“错误处理”来解决这个问题,让程序在遇到问题时能够给出友好的提示,而不是直接停止运行。

总之,处理数据和错误是编程中非常重要的部分,掌握这些技能可以让你的程序更加健壮和用户友好。

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

在 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)

撰写回答