我在下面的内容将遍历对象列表并收集称为“年龄”的属性。
values = [ getattr(x.data, "age", "") for x in nodes ] >> ['5', '7', '12']
但是,如果属性“ age”不存在,它将返回此值
>> ['5', '', '7', '', '12']
我如何修改代码行,以便生成的列表不会包含空值。
生成后过滤列表:
values = [ getattr(x.data, 'age', '') for x in nodes ] values = list(filter(bool, values)) # just filter(bool, values) in Python 2
或在生成列表时过滤列表:
values = [ getattr(x.data, 'age') for x in nodes if hasattr(x.data, 'age')]
或者确实(来自Hai Vu的评论),如果'age'
不是字符串变量的代表,则无需使用即可直接访问该字段getattr
。
values = [ x.data.age for x in nodes if hasattr(x.data, 'age')]
更新:
按照你进一步的问题,在x.data.age
,data.age
是不是的属性x
。
data
是的属性x
,并且age
是持有的值的属性x.data
。您可以根据需要检查归因的两个阶段:
values = [x.data.age for x in nodes if hasattr(x, 'data') and hasattr(x.data, 'age')]