也许我起得太晚了。在
我有一个对象,它是字典的一个薄薄的包装。它将假装拥有字典中任何键的属性,如果引用了不存在的键,则返回None。在
我只想为三个可能的键返回唯一的“truthy”值。(不是没有)。对象可能没有一个或多个键。或者,它可能在两个或三个键中具有相同的值。在
这段代码可以满足我的要求:
set(getattr(obj, field) for field in ['field1', 'field2', 'field3'] if getattr(obj, field))
我只是不喜欢重复getattr()两次的样子。我觉得我忽略了一个更好的方法。在
如果瘦包装返回默认值
None
:另一种可能性是:
^{pr2}$您可以在以后筛选出
None
值:或者你可以忘了这个东西。我可能会这样做:
^{pr2}$另一种使用getattr默认值的方法:
编辑:
这里要向你展示这个功能背后的逻辑,以及为什么我认为它可能比其他一些解决方案更好(我可能错了,但是嘿,生活就是要从错误中学习)
^{pr2}$如您所见,只有1个循环,并且对每个字段只调用一次
getattr()
。只有“真实”的值被添加到结果中。我认为这比获得所有结果,然后在以后删除“非真实”值更有效。但是如果我错了请纠正我。干杯。在相关问题 更多 >
编程相关推荐