重构手动联接循环

问题描述

我有一些代码根据共同的字典字段和条件在内存中的多个列表之间连接。我认为有一种更有效的方法来编写此代码,但是我不确定它现在是什么样。数据的顺序没有强制执行,可以按任何顺序显示

# update component set component.build_status = latest.build_status INNER JOIN latest on component.name= latest.component where component.environment = latest.environment AND latest.build_status = 'failure'

  for component in state["components"]:
      for component_data in state["latest"]:
          if component_data["environment"] == component["environment"] and \
             component_data["name"] == component["name"] and \
             component_data["build_success"] == "failure":
              component["build_success"] = "failure"

如何重构此联接?

我认为我可以使用类和查找而不是循环来做一些事情。但是我没有看到它,因为代码可能很简单。你觉得呢?


上下文:我正在编写一个构建服务器。我有一个包含环境,组件,最新,命令,运行的模型。 问题是我有嵌套循环,用于在各个集合之间搜索匹配项,并在它们之间复制状态标志。我必须先加入才能复制状态标记

sql大约在代码上方。

这是模型的缩小视图。我从中删除了很多数据。

代码示例中的状态对应于以下“ app”:

{
    "app": {
        "latest": [
            {
                "name": "ansible-inventory/tools","environment": "production","commands": [
                    {
                        "name": "run","progress": 100,"buildIdentifier": "0","build_number": 4,"build_success": "success"
                    },{
                        "name": "test","build_number": 2,"build_success": "success"
                    }
                ],"build_success": "success"

        ],"components": [

            {
                "name": "ansible-inventory/tools","status": "ready","command": "validate","build_success": "success"
            },{
                "name": "ansible-local/dev","build_success": "success"
            }
        ],"running": [],"environments": [
            {
                "name": "home","facts": "12 tasks,2 components",{
                "name": "production","build_success": "success"
            }
        ]
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)