将 Python 对象列表减少为 object.id 的字典 ->目的
您有对象列表,每个对象都有一个 id 属性。
这是我将其转换为 dict 的方法,其中键是 id,值是对象:
reduce(
lambda x,y: dict(x.items() + { y.id : y}.items()),
list,
{}
)
建议更好的方法。
You have list of objects and each of them has an id
property.
Here's my way to convert it to dict where keys are ids and values are objects:
reduce(
lambda x,y: dict(x.items() + { y.id : y}.items()),
list,
{}
)
Suggest better way to do it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 Python 3.x 中:
在 Python 3.x 和 Python 2.4+ 中:
(x.id, x) for x in object_list
是生成器理解(而且,很好的是,不需要包装如果将其用作调用的单个参数,则需要将其放在括号中,例如列表理解,当然,这意味着在其他情况下我使用的表达式必须是((x.id, x) 表示 object_list 中的 x)
)。与列表理解不同,它不会生成所有项目的实际列表,因此在这种情况下更有效。附带说明一下,Python 有一个内置方法 id():
因此,如果您想让 Python 自己处理 ids,您可以这样做:
或
In Python 3.x:
In both Python 3.x and Python 2.4+:
(x.id, x) for x in object_list
is a generator comprehension (and, nicely, does not need to be wrapped in parentheses like a list comprehension needs to be wrapped in brackets if it's being used as a single argument for a call; of course, this means that in other circumstances the expression I used would have to be((x.id, x) for x in object_list)
). Unlike a list comprehension, it will not generate an actual list of all the items, and is thus more efficient in situations such as this.As a side note, Python has a built-in method
id()
:So if you wanted to let Python handle the ids on its own, you could do it as:
or