def layoutrow(sizes, x, y, dx, dy):
    """
    Generate rectangle dimensions for each size in sizes when remaining width
    exceeds remaining height (dx >= dy). Rectangles will fill up height dy,
    and width will be determined by their area. Sizes should be pre-normalized
    with respect to dx * dy (i.e., they should be same units)

    :param sizes: Ordered (desc) ist of values normalized with respect to
        overall height (dy) and width values (dx)
    :param x: Rectangle start point on treemap x-axis
    :param y: Rectangle start point on treemap y-axis
    :param dx: Remaining treemap width
    :param dy: Remaining treemap height
    :return: List of dictionaries of rectangle dimensions
    """
    covered_area = sum(sizes)
    width = covered_area / dy
    rects = []
    heights = 0
    for size in sizes:
        rects.append({'x': x, 'y': dy - size / width, 'dx': width, 'dy': 
            size / width})
        dy -= size / width
    return rects
