def build_markdown_table(headers, rows, row_keys=None):
row_maxes = _find_row_maxes(headers, rows)<EOL>row_keys = row_keys or [key for key, value in headers.items()]<EOL>table = [<EOL>_build_row(headers, row_maxes, row_keys),<EOL>_build_separator(row_maxes, row_keys)<EOL>]<EOL>for row in rows:<EOL><INDENT>table.append(_build_row(row, row_maxes, row_keys))<EOL><DEDENT>return '<STR_LIT:\n>'.join(table) + '<STR_LIT:\n>'<EOL>
Build a lined up markdown table.

    Args:
        headers (dict): A key -> value pairing fo the headers.
        rows (list): List of dictionaries that contain all the keys listed in
        the headers.
        row_keys (list): A sorted list of keys to display

    Returns:
        A valid Markdown Table as a string.