code: def set_select(self, data):
          
          for (name, value) in data.items():
              select = self.form.find("select", {"name": name})
              if not select:
                  raise InvalidFormMethod("No select named " + name)
  
              # Deselect all options first
              for option in select.find_all("option"):
                  if "selected" in option.attrs:
                      del option.attrs["selected"]
  
              # Wrap individual values in a 1-element tuple.
              # If value is a list/tuple, select must be a <select multiple>.
              if not isinstance(value, list) and not isinstance(value, tuple):
                  value = (value,)
              elif "multiple" not in select.attrs:
                  raise LinkNotFoundError("Cannot select multiple options!")
  
              for choice in value:
                  option = select.find("option", {"value": choice})
  
                  # try to find with text instead of value
                  if not option:
                      option = select.find("option", string=choice)
  
                  if not option:
                      raise LinkNotFoundError(
                          'Option %s not found for select %s' % (choice, name)
                      )
  
                  option.attrs["selected"] = "selected"
docs: Set the *selected*-attribute of the first option element
          specified by ``data`` (i.e. select an option from a dropdown).
  
          :param data: Dict of ``{name: value, ...}``.
              Find the select element whose *name*-attribute is ``name``.
              Then select from among its children the option element whose
              *value*-attribute is ``value``. If no matching *value*-attribute
              is found, this will search for an option whose text matches
              ``value``. If the select element's *multiple*-attribute is set,
              then ``value`` can be a list or tuple to select multiple options.