<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_drop_down(self, col_number, col_label):
 """ Add a correctly formatted drop-down-menu for given col_label, if required or suggested. Otherwise do nothing. Parameters col_number : int grid position at which to add a drop down menu col_label : str column name """

        if col_label.endswith('**') or col_label.endswith('^^'):
            col_label = col_label[:-2]
        # add drop-down for experiments
        if col_label == "experiments":
            if 'measurements' in self.contribution.tables:
                meas_table = self.contribution.tables['measurements'].df
                if 'experiment' in meas_table.columns:
                    exps = meas_table['experiment'].unique()
                    self.choices[col_number] = (sorted(exps), False)
                    self.grid.SetColLabelValue(col_number, col_label + "**")
            return
        #
        if col_label == 'method_codes':
            self.add_method_drop_down(col_number, col_label)
        elif col_label == 'magic_method_codes':
            self.add_method_drop_down(col_number, 'method_codes')
        elif col_label in ['specimens', 'samples', 'sites', 'locations']:
            if col_label in self.contribution.tables:
                item_df = self.contribution.tables[col_label].df
                item_names = item_df.index.unique() #[col_label[:-1]].unique()
                self.choices[col_number] = (sorted(item_names), False)
        elif col_label in ['specimen', 'sample', 'site', 'location']:
            if col_label + "s" in self.contribution.tables:
                item_df = self.contribution.tables[col_label + "s"].df
                item_names = item_df.index.unique() #[col_label[:-1]].unique()
                self.choices[col_number] = (sorted(item_names), False)
        # add vocabularies
        if col_label in self.contribution.vocab.suggested:
            typ = 'suggested'
        elif col_label in self.contribution.vocab.vocabularies:
            typ = 'controlled'
        else:
            return

        # add menu, if not already set
        if col_number not in list(self.choices.keys()):
            if typ == 'suggested':
                self.grid.SetColLabelValue(col_number, col_label + "^^")
                controlled_vocabulary = self.contribution.vocab.suggested[col_label]
            else:
                self.grid.SetColLabelValue(col_number, col_label + "**")
                controlled_vocabulary = self.contribution.vocab.vocabularies[col_label]
            #
            stripped_list = []
            for item in controlled_vocabulary:
                try:
                    stripped_list.append(str(item))
                except UnicodeEncodeError:
                    # skips items with non ASCII characters
                    pass

            if len(stripped_list) > 100:
            # split out the list alphabetically, into a dict of lists {'A': ['alpha', 'artist'], 'B': ['beta', 'beggar']...}
                dictionary = {}
                for item in stripped_list:
                    letter = item[0].upper()
                    if letter not in list(dictionary.keys()):
                        dictionary[letter] = []
                    dictionary[letter].append(item)
                stripped_list = dictionary

            two_tiered = True if isinstance(stripped_list, dict) else False
            self.choices[col_number] = (stripped_list, two_tiered)
        return