当前位置:  开发笔记 > 编程语言 > 正文

python-从存在属性的对象列表中收集属性

如何解决《python-从存在属性的对象列表中收集属性》经验,为你挑选了1个好方法。

我在下面的内容将遍历对象列表并收集称为“年龄”的属性。

values = [ getattr(x.data, "age", "") for x in nodes ]
>> ['5', '7', '12']

但是,如果属性“ age”不存在,它将返回此值

>> ['5', '', '7', '', '12']

我如何修改代码行,以便生成的列表不会包含空值。



1> khelwood..:

生成后过滤列表:

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.agedata.age不是的属性x
data是的属性x,并且age是持有的值的属性x.data。您可以根据需要检查归因的两个阶段:

values = [x.data.age for x in nodes if hasattr(x, 'data') and hasattr(x.data, 'age')]

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有