<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def getNonDefaultsDict(self):
 """ Recursively retrieves values as a dictionary to be used for persistence. Does not save defaultData and other properties, only stores values if they differ from the defaultData. If the CTI and none of its children differ from their default, a completely empty dictionary is returned. This is to achieve a smaller json representation. Typically descendants should override _nodeGetNonDefaultsDict instead of this function. """

        dct = self._nodeGetNonDefaultsDict()

        childList = []
        for childCti in self.childItems:
            childDct = childCti.getNonDefaultsDict()
            if childDct:
                childList.append(childDct)
        if childList:
            dct['childItems'] = childList

        if dct:
            dct['nodeName'] = self.nodeName

        return dct