python - 如何使用 lambda 和 hasattr 过滤嵌套属性上的对象数组?
问题描述
我有以下 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'}}]
推荐阅读
- c++ - 使用 GoogleMock 模拟由被测代码创建的实例
- php - PHP Soap“捕获异常:服务器无法处理请求。---> 对象引用未设置为对象的实例。”
- apache-flink - Apache Flink:作业完成后如何做一些动作?
- php - 使用 php 和 mysql 进行搜索查询的问题
- swift - 如何快速为每个单元格添加不同的附件(或子视图)?
- python - Python 3 Multiprocessing - 我应该使用多少个进程?
- c++ - C++:为什么会出现错误:“数组初始值设定项必须是初始值设定项列表或字符串文字”?
- amazon-web-services - 识别目标组中的 AWS 不健康主机
- html - 无法在我的 html 页面中集成 mp4 视频
- jquery - JQuery 新行