Я пытаюсь удалить пустые и пустые ключи из моего объекта python, вызвав метод из модуля.
from file2 import remove_nulls
# initialize object and set attributes
obj.remove_nulls()
В моем remove_nulls()
, если я печатаю результирующий объект, я могу заметить, что пустые и пустые ключи удаляются, но после возврата из функции конечный объект по-прежнему имеет пустые и пустые ключи.
def remove_null(feature):
return json.dumps(del_none(feature.__dict__.copy()))
def del_none(d):
for key, value in list(d.items()):
if value is None:
del d[key]
elif isinstance(value, dict):
del_none(value)
return d
Может кто-нибудь помочь в штрафах, где это пошло не так?
Слишком много копий...:
def remove_null(feature):
return json.dumps(del_none(feature.__dict__.copy()))
который применяет del_none
к копии вашего объекта, выгружает правильный "очищенный" объект, затем возвращается, оставляя ваш объект нетронутым (с момента создания копии). Вы, вероятно, должны сделать именно:
def remove_null(feature):
return json.dumps(del_none(feature.__dict__))
Путаница, вероятно, возникает из-за необходимости скопировать словарные ключи + значения, чтобы избежать удаления элементов на dict во время итерации на нем (что, вероятно, было обработано здесь, на неправильном уровне, а затем обработано на соответствующем уровне, но первая копия не была удален)
return
находится внутриfor
цикла. Это должно быть после этого.return del_none(value)
classic dupe