def METHOD_NAME(candidates, fields=None):
    if fields is None:
        fields = MERGE_DONOR_FIELDS
    merged_donor_data = {}
    for field in fields:
        best_value = None
        for donor in candidates:
            val = getattr(donor, field)
            if best_value is None:
                if isinstance(val, dict):
                    best_value = dict(val)
                else:
                    best_value = val
                continue
            if isinstance(val, dict):
                best_value.update(val)
            elif val:
                best_value = val
        if best_value is not None:
            merged_donor_data[field] = best_value
    merged_donor = Donor(**merged_donor_data)
    return merged_donor