code: def add_fields(
          layer, absolute_values, static_fields, dynamic_structure):
      
      for new_dynamic_field in dynamic_structure:
          field_definition = new_dynamic_field[0]
          unique_values = new_dynamic_field[1]
          for column in unique_values:
              if (column == ''
                      or (hasattr(column, 'isNull')
                          and column.isNull())):
                  column = 'NULL'
              field = create_field_from_definition(field_definition, column)
              layer.addAttribute(field)
              key = field_definition['key'] % column
              value = field_definition['field_name'] % column
              layer.keywords['inasafe_fields'][key] = value
  
      for static_field in static_fields:
          field = create_field_from_definition(static_field)
          layer.addAttribute(field)
          # noinspection PyTypeChecker
          layer.keywords['inasafe_fields'][static_field['key']] = (
              static_field['field_name'])
  
      # For each absolute values
      for absolute_field in list(absolute_values.keys()):
          field_definition = definition(absolute_values[absolute_field][1])
          field = create_field_from_definition(field_definition)
          layer.addAttribute(field)
          key = field_definition['key']
          value = field_definition['field_name']
          layer.keywords['inasafe_fields'][key] = value
docs: Function to add fields needed in the output layer.
  
      :param layer: The vector layer.
      :type layer: QgsVectorLayer
  
      :param absolute_values: The absolute value structure.
      :type absolute_values: dict
  
      :param static_fields: The list of static fields to add.
      :type static_fields: list
  
      :param dynamic_structure: The list of dynamic fields to add to the layer.
      The list must be structured like this:
      dynamic_structure = [
          [exposure_count_field, unique_exposure]
      ]
      where "exposure_count_field" is the dynamic to field to add and
      "unique_exposure" is the list of unique values to associate with this
      dynamic field. Because dynamic_structure is a ordered list, you can add
      many dynamic fields.
      :type dynamic_structure: list