code: def create_field_from_definition(field_definition, name=None, sub_name=None):
      
      field = QgsField()
  
      if name and not sub_name:
          field.setName(field_definition['field_name'] % name)
      elif name and sub_name:
          field.setName(field_definition['field_name'] % (name, sub_name))
      else:
          field.setName(field_definition['field_name'])
  
      if isinstance(field_definition['type'], list):
          # Use the first element in the list of type
          field.setType(field_definition['type'][0])
      else:
          field.setType(field_definition['type'])
      field.setLength(field_definition['length'])
      field.setPrecision(field_definition['precision'])
      return field
docs: Helper to create a field from definition.
  
      :param field_definition: The definition of the field (see:
          safe.definitions.fields).
      :type field_definition: dict
  
      :param name: The name is required if the field name is dynamic and need a
          string formatting.
      :type name: basestring
  
      :param sub_name: The name is required if the field name is dynamic and need
          a string formatting.
      :type sub_name: basestring
  
      :return: The new field.
      :rtype: QgsField