Вы можете попробовать добавить уникальный идентификатор к элементам, который просто не отображается для пользователя, тогда позже вы сможете отслеживать элементы независимо от внесенных в них изменений. Если это не вариант, вы также можете попробовать найти элементы по значению ha sh.
Например, если вы знаете, что все элементы в списке не совсем идентичны, и что их содержимое не изменится из-за редактирования пользователем, вы можете сделать что-то вроде tuple(i for i in important_widget.items())
, чтобы получить неизменяемую (и, следовательно, хешируемую) версию вашего виджета для сравнения с тем, что у вас было до редактирования пользователем.
Пример
data = {
"some_value_buried_in_the_json": [
{
"is_important": True,
"some_unique_data": 123,
"user_cares_about": True
},
{
"is_important": True,
"some_unique_data": 999,
"user_cares_about": True
},
{
"is_important": True,
"some_unique_data": 734,
"user_cares_about": False
},
{
"is_important": True,
"some_unique_data": 678,
"user_cares_about": True
}
]
}
pre_unimportant_to_user_data = data['some_value_buried_in_the_json'][1]
# Simulate data being modified by user
data['some_value_buried_in_the_json'].insert(2, {'is_important': True, 'some_unique_data': 111, 'user_cares_about': True})
hashed_value = tuple(i for i in pre_unimportant_to_user_data.items())
for value in data['some_value_buried_in_the_json']:
if tuple(i for i in value.items()) == hashed_value:
print('found the previous entry')
Работает
$ python example.py
found the previous entry