@lemonlimelike

Почему не скопировался исходный список?

Почему не скопировался исходный список?
def em(list_data):
    	with open('test2.json','r',encoding='utf-8') as file_json:
    		data_json = []
    		for item in file_json:
    			try:
    				data_json.append(json.loads(item))
    			except Exception as err:
    				print(err)
    	data_result = []
    	copy_list_data = list_data.copy()
    
    	for data in list_data:
    		for item in data_json:
    			if data['idnp'] in item[0] or data['idnp'] == item[0]:
    				data_result.append(item)
    				data.clear()
    				break
    		
    	for data in list_data:
    		if data.get('idnp'):
    			data_result.append(list(data.values()))
    
    	print(copy_list_data)

В первом цикле я достаю из файла все строки. Во втором цикле я добавляю в нужном мне порядке элементы в список `data_result` и затем то что добавил очищаю. И в `list_data` остается уже очищенный список и затем то что осталось я добавляю в окончательный список.

Но почему в переменной `copy_list_data` после того как я очистил список `list_data` сохраняется очищенный список? Я же скопировал исходный список до очищения

А можно как-то по другому написать данную функцию, без дополнительных циклов и переменных?
Объясню, что мне нужно: В файле находятся строки такого вида
["S18D8402100DY", "\u041a\u0410\u041f\u041e\u0422", "Chery", "0", "15", 11604.06, "BRAN", 11922.12, "TKUC", 11951.53, "FRZA", "None"]

А в исходном списке `list_data` есть словари и в каждый словарь имеет уникальный артикул, ключ idnp, пример
{'idnp': 'F3102000C1', 'name': '', 'brand': 'LIFAN', 'min_count': 0, 'max_time_delivery': 15, 'count_sell': nan}


В исходном списке находятся словари для парсинга, в результате, после парсинга, данные сохраняются в json'e в файл. Далее я вызываю эту функцию. Но данные которые в исходном списке и файле расходятся. В файле может быть такое, что некоторых записей нету. Поэтому мне нужно получить список, в котором будут недостающие записи из исходного списка. Как это сделать?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
@dmtrrr
Backend developer
Нужно использовать deepcopy https://docs.python.org/3/library/copy.html#copy.d...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы