小编Dmi*_*nko的帖子

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

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

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

reduce(
  lambda x,y: dict(x.items() + { y.id : y}.items()),
  list,
  {}
)
Run Code Online (Sandbox Code Playgroud)

建议更好的方法来做到这一点.

python lambda dictionary

36
推荐指数
3
解决办法
3万
查看次数

可能的 MSVC 编译器错误

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

c++ std shared-ptr visual-c++ language-lawyer

10
推荐指数
1
解决办法
423
查看次数