def make_list_table_from_mappings(headers, data, title, columns=None):
    """Build a list-table directive.

    :param headers: List of tuples containing header title and key value.
    :param data: Iterable of row data, yielding mappings with rows.
    :param title: Optional text to show as the table title.
    :param columns: Optional widths for the columns.
    """
    header_names = [h[0] for h in headers]
    header_keys = [h[1] for h in headers]
    row_data = (
        [d.get(k) for k in header_keys]
        for d in data
    )
    return make_list_table(header_names, row_data, title, columns)