【发布时间】:2019-07-26 00:27:01
【问题描述】:
我有以下 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。你能告诉我我的代码有什么问题吗?
【问题讨论】:
-
如果你拆分你的条件,你会发现你的第一个过滤命令返回一个空列表——长度为 0,任何进一步的过滤都将返回长度 0。
-
@meowgoesthedog 我尝试使用
myArray_filtered = filter(lambda item : 'specs' in item and 'color' in item.specs), myArray),但它不起作用。抱歉,这是我第一次使用 Python! -
@hd1 是的,你是对的,我现在明白了……反正我不知道哪里出了问题。
-
@meowgoesthedog 你的答案比我的有优势,如果“颜色”的值为
None我需要使用另一个默认值
标签: python arrays object lambda hasattr