def METHOD_NAME(bin_name: str, expression: resources._BaseExpr, expression_read_flags: int = 0):
    """Create an expression read operation dictionary.
    Reads and returns the value produced by the evaluated expression.
    Args:
        bin_name (str): The name of the bin to read from. Even if no bin is being read from, the value will be returned
            with this bin name.
        expression: A compiled Aerospike expression, see :ref:`aerospike_operation_helpers.expressions`.
        expression_read_flags (int): :ref:`aerospike_expression_read_flags` (default ``aerospike.EXP_READ_DEFAULT``)
    Returns:
        A dictionary to be passed to operate or operate_ordered.
    Example::
        # Read the value of int bin "balance".
        # Let 'client' be a connected aerospike client.
        # Let int bin 'balance' == 50.
        from aerospike_helpers.operations import expression_operations as expressions
        from aerospike_helpers.expressions import *
        expr = IntBin("balance").compile()
        ops = [
            expressions.expression_read("balance", expr)
        ]
        _, _, res = client.operate(self.key, ops)
       print(res)
       # EXPECTED OUTPUT: {"balance": 50}
    """
    op_dict = {
        OP_KEY: aerospike.OP_EXPR_READ,
        BIN_KEY: bin_name,
        EXPR_KEY: expression,
        EXPR_FLAGS_KEY: expression_read_flags,
    }
    return op_dict