'Represent multiple values as dict {value: representation}
@param values: list of values
@param rows: the rows
@param show_link: render each representation as link
@return: a dict {value: representation}
@note: for list-types, the dict keys will be the individual
values within all lists - and not the lists (simply
because lists can not be dict keys). Thus, the caller
would still have to construct the final string/HTML.'

def bulk(self, values, rows=None, list_type=True, show_link=True):

    self._setup()
    show_link = (show_link and self.show_link)
    if (rows and self.table):
        key = self.key
        _rows = self.rows
        values = set()
        add_value = values.add
        for row in rows:
            value = row[key]
            _rows[value] = row
            add_value(value)
        values = list(values)
    elif (self.list_type and list_type):
        try:
            hasnone = (None in values)
            if hasnone:
                values = [i for i in values if (i != None)]
            values = list(set(chain.from_iterable(values)))
            if hasnone:
                values.append(None)
        except TypeError:
            raise ValueError(('List    of    lists    expected,    got    %s' % values))
    else:
        values = ([values] if (type(values) is not list) else values)
    if values:
        labels = self._lookup(values, rows=rows)
        if show_link:
            link = self.link
            rows = self.rows
            labels = dict(((k, link(k, v, rows.get(k))) for (k, v) in labels.items()))
        for k in values:
            if (k not in labels):
                labels[k] = self.default
    else:
        labels = {}
    labels[None] = self.none
    return labels
