您有对象列表,每个对象都有一个id属性.
这是我的方法来将它转换为dict,其中键是id,值是对象:
reduce(
lambda x,y: dict(x.items() + { y.id : y}.items()),
list,
{}
)
Run Code Online (Sandbox Code Playgroud)
建议更好的方法来做到这一点.
鉴于在 for 循环的条件子句中声明的 shared_ptr 变量包含 if/continue 语句,Microsoft 编译器(自 2015 版起)每次循环迭代都会生成额外的析构函数调用(总共两个)。这会导致 Holder 界面用户无法访问的 Item 对象被破坏。请参阅下面的示例代码
namespace
{
class Item
{
public:
Item(size_t v)
: value_(v)
{
std::cout << "Item(" << value_ << ")" << std::endl;
}
~Item()
{
std::cout << "~Item(" << value_ << ")" << std::endl;
}
void print() const
{
std::cout << "Item::print(" << value_ << ")" << std::endl;
}
private:
size_t value_;
};
typedef std::shared_ptr<const Item> ItemCPtr;
class Holder
{
public:
Holder(size_t n)
{
for (size_t i = …Run Code Online (Sandbox Code Playgroud)