<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_disorder_subseq_3D(protein, pdbflex_keys_file, disorder_cutoff=2, disorder_condition='>'):
 """DISORDERED REGION 3D"""

        with open(pdbflex_keys_file, 'r') as f:
            pdbflex_keys = json.load(f)

        if protein.id not in pdbflex_keys:
            log.warning('{}: no PDBFlex info available'.format(protein.id))
            final_repseq_sub, final_repseq_sub_resnums = (None, [])

        else:
            # Gather disordered regions for all mapped PDBFlex keys -- gets maximum disorder
            # TODO: should add option to do the opposite (get consensus disorder)
            repseq_sub_resnums_all = []
            for disorder_prop in pdbflex_keys[protein.id]:
                repseq_sub_raw, repseq_sub_resnums_raw = protein.representative_sequence.get_subsequence_from_property(
                        property_key=disorder_prop,
                        property_value=disorder_cutoff,
                        condition=disorder_condition,
                        return_resnums=True) or (None, [])
                repseq_sub_resnums_all.extend(repseq_sub_resnums_raw)

            final_repseq_sub_resnums = list(set(repseq_sub_resnums_all))
            final_repseq_sub = protein.representative_sequence.get_subsequence(resnums=final_repseq_sub_resnums)

        return {'subseq_len'    : len(final_repseq_sub_resnums), 'subseq': final_repseq_sub,
                'subseq_resnums': final_repseq_sub_resnums}