<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def prepare_create_transaction(*, signers, recipients=None, asset=None, metadata=None):
 """Prepares a ``"CREATE"`` transaction payload, ready to be fulfilled. Args: signers (:obj:`list` | :obj:`tuple` | :obj:`str`):
 One or more public keys representing the issuer(s) of the asset being created. recipients (:obj:`list` | :obj:`tuple` | :obj:`str`, optional):
 One or more public keys representing the new recipients(s) of the asset being created. Defaults to ``None``. asset (:obj:`dict`, optional):
 The asset to be created. Defaults to ``None``. metadata (:obj:`dict`, optional):
 Metadata associated with the transaction. Defaults to ``None``. Returns: dict: The prepared ``"CREATE"`` transaction. .. important:: * If ``asset`` is set, it MUST be in the form of:: { 'data': { } } * If ``recipients`` is not given, or evaluates to ``False``, it will be set equal to ``signers``:: if not recipients: recipients = signers """

    if not isinstance(signers, (list, tuple)):
        signers = [signers]
    # NOTE: Needed for the time being. See
    # https://github.com/bigchaindb/bigchaindb/issues/797
    elif isinstance(signers, tuple):
        signers = list(signers)

    if not recipients:
        recipients = [(signers, 1)]
    elif not isinstance(recipients, (list, tuple)):
        recipients = [([recipients], 1)]
    # NOTE: Needed for the time being. See
    # https://github.com/bigchaindb/bigchaindb/issues/797
    elif isinstance(recipients, tuple):
        recipients = [(list(recipients), 1)]

    transaction = Transaction.create(
        signers,
        recipients,
        metadata=metadata,
        asset=asset['data'] if asset else None,
    )
    return transaction.to_dict()