Если условие присваивает предыдущее значение dict

avatar
Lily
8 августа 2021 в 17:13
32
0
0

У меня есть переменная, которая является вложенным словарем. И я хочу на каждой итерации присваивать новые значения. Но эта часть кода присваивает предыдущему значению targetInstances значение, которого быть не должно.

 if "targetInstances" in filter_sf:
    new_filter = self._set_filter_comp_oper_value(pipeline, new_filter, source_field["id"], filter_sf)

Как исправить, что при каждой итерации, если ключ ("targetInstances" в моем случае) не существует, он не назначается? Текущий обходной путь, который я использую, - это просто поместить dict без "targetInstances" в начале.

Моя переменная:

filters_to_add = {'Recruiter': {"AND":"", "operatorId": 'not in the selection list', "targetInstances": '3314 Tax'},'Job Profile': {"AND":"", "operatorId": 'in the selection list', "targetInstances": 'Finance'}, 'Job Requisition': {"AND":"", "operatorId": 'is not empty'}}

Мой код

    def _prepare_json(self, pipeline, filters_to_add: dict):
        new_filter = {"type": 'CONDITION', "id": 'any_id', "field": {},"operatorId": 'null'}
        source_fields = self.ssi_get_filter_source_fields(pipeline).json_path("$.data")
        filters = self._get_filters(pipeline)
        for key in filters_to_add.keys():
            if "AND" in filters_to_add[key].keys():
              filter_sf = filters_to_add[key]
              for source_field in source_fields:
                 if source_field["descriptor"] == key:
                   new_filter["field"] = source_field
                   new_filter["operatorId"] = filter_sf["operatorId"]
                   if "dataType" in filter_sf and source_field["returnType"] == filter_sf["dataType"]:
                      new_filter[filter_sf["targetType"]] = filter_sf["targetValue"]
                   if "targetInstances" in filter_sf:
                      new_filter = self._set_filter_comp_oper_value(pipeline, new_filter, source_field["id"], filter_sf)
                  if "useValueFromAnotherField" in filter_sf:
                       new_filter = self._set_filter_value_from_another_field(pipeline, new_filter, source_field["id"], filter_sf)
        return self._prepare_json(pipelineId=pipeline, filter=filters)

Источник

Ответы (0)