我有以下Python代码:

myArray = [{ "id": 1, "desc": "foo", "specs": { "width": 1, "height": 1}}, { "id": 2, "desc": "bar", "specs": { "width": 2, "height": 2, "color": "black"}}, { "id": 3, "desc": "foobar"}]
print len(myArray)

myArray_filtered = filter(lambda item : hasattr(item, "specs") and hasattr(item.specs, "color"), myArray)
print len(myArray_filtered)


我希望在第二次打印时得到长度1,但是它是0。您能告诉我代码有什么问题吗?

最佳答案

给定您的嵌套结构,可以将dict.get与一些默认值一起使用:

>>> myArray_filtered = list(filter(lambda d: d.get("specs", {}).get("color") is not None, myArray))
>>> len(myArray_filtered)
1
>>> myArray_filtered
[{'id': 2, 'desc': 'bar', 'specs': {'width': 2, 'height': 2, 'color': 'black'}}]

关于python - 如何使用lambda和hasattr过滤嵌套属性上的对象数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54987532/

10-12 16:46