如何合并Python中仅字典键不同的两个列表推导式?
解决方法
你可以通过在列表推导式中新增一层循环,遍历['stopped', 'warning']这两个键,就能一次性把两种来源的日志合并生成,不用写两个重复的推导式:
logs_combined = [ DDLog(self.HOST, "dms", log["name"], log["StopReason"], f"env:{env}").to_log() for env in self.envs for key in ['stopped', 'warning'] for log in tasks[env][key]["tasks"] ]
如果担心部分环境下不存在其中某个键(比如有的env只有"stopped"没有"warning"),可以用get方法避免KeyError,确保代码鲁棒性:
logs_combined = [ DDLog(self.HOST, "dms", log["name"], log["StopReason"], f"env:{env}").to_log() for env in self.envs for key in ['stopped', 'warning'] for log in tasks[env].get(key, {}).get("tasks", []) ]
这个写法的逻辑是:先遍历所有环境,再遍历两个目标键,最后遍历对应键下的tasks列表,把所有符合条件的日志都生成出来,完全等价于你原来两个推导式的结果合并。
内容的提问来源于stack exchange,提问作者marcin2x4
相关产品推荐
相关产品推荐

