Python: How to remove all empty fields in a nested dict

前端 未结 4 2241
情深已故
情深已故 2020-12-15 13:02

If I have a dict, which field\'s values may also be a dict or an array. How can I remove all empty fields in it?

\"Empty field\" means a field\'s value is empty arra

4条回答
  •  别那么骄傲
    2020-12-15 13:09

    def remove_empty_fields(data_):
        """
            Recursively remove all empty fields from a nested
            dict structure. Note, a non-empty field could turn
            into an empty one after its children deleted.
    
            :param data_: A dict or list.
            :return: Data after cleaning.
        """
        if isinstance(data_, dict):
            for key, value in data_.items():
    
                # Dive into a deeper level.
                if isinstance(value, dict) or isinstance(value, list):
                    value = remove_empty_fields(value)
    
                # Delete the field if it's empty.
                if value in ["", None, [], {}]:
                    del data_[key]
    
        elif isinstance(data_, list):
            for index in reversed(range(len(data_))):
                value = data_[index]
    
                # Dive into a deeper level.
                if isinstance(value, dict) or isinstance(value, list):
                    value = remove_empty_fields(value)
    
                # Delete the field if it's empty.
                if value in ["", None, [], {}]:
                    data_.pop(index)
    
        return data_
    

提交回复
热议问题