繁体   English   中英

python生成器不符合我的期望

[英]python generator does not work as my expectation

class ObjA(object):
    def __init__(self, self_id):
        self.id = self_id
        self.sub_items = []

    def __str__(self):
        return "objA{id=%d;sub_items=%s}" % (self.id, str(self.sub_items))

    __repr__ = __str__


lst = []
a1 = ObjA(1)
a1.sub_items.append(1)
a1.sub_items.append(2)
a2 = ObjA(2)
a2.sub_items.append(3)
lst.append(a1)
lst.append(a2)
result = {a.id: {tmp: a} for a in lst for tmp in a.sub_items}
print result

结果是:

{1: {2: objA{id=1;sub_items=[1, 2]}}, 
 2: {3: objA{id=2;sub_items=[3]}}};

但我想要这样:

{1: {1: objA{id=1;sub_items=[1, 2]},
     2: objA{id=1;sub_items=[1, 2]}}, 
 2: {3: objA{id=2;sub_items=[3]}}};

出了点问题。

您要查找的嵌套理解如下:

{a.id: {tmp: a for tmp in a.sub_items} for a in lst}
# {1: {1: objA{id=1;sub_items=[1, 2]}, 
#      2: objA{id=1;sub_items=[1, 2]}}, 
#  2: {3: objA{id=2;sub_items=[3]}}}

您的原始版本通常用于创建平面数据结构。 这导致键1被分配两次,仅保留第二个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM