#python #python-3.x #dictionary
#python #python-3.x #словарь
Вопрос:
итак, я получаю сообщение об ошибке: RuntimeError: словарь изменил размер во время итерации.
У меня есть 2 матрицы, одна для информации о Xbox и одна с информацией о PS4. Первая функция создает словарь с учетом матрицы Xbox. Он просматривает каждый список внутри матрицы, берет информацию из каждого списка и добавляет ее в словарь. Вторая функция берет уже созданный словарь def create_dictionary_xbox
и добавляет к нему. Я пытаюсь сделать так, чтобы он выводил что-то вроде этого:
{genre:{game:[info], game:[info]}}
Вот мой код:
def create_dictionary_xbox(lists_of_data):
dictionary = {}
for list_ in lists_of_data:
game = list_[0]
genre = list_[2]
if genre not in dictionary:
dictionary[genre] = {game : list_[3:]}
elif genre in dictionary:
(dictionary[genre])[game] = list_[3:]
return dictionary
def create_dictionary_PS4(lists_of_data,dictionary):
for list_ in lists_of_data:
game = list_[0]
genre = list_[2]
for key in dictionary:
if genre not in dictionary:
dictionary[genre] = {game : list_[3:]}
elif genre in dictionary:
(dictionary[genre])[game] = list_[3:]
return dictionary
Ответ №1:
Я предполагаю, что структура данных выглядит следующим образом:
['gameX', 'useless_info', 'genreX', 'info', 'info', ...]
Я предполагаю, что если структура данных в обоих списках одинакова, проще суммировать два списка и взаимодействовать только один раз, верно?
complete_list = list_of_data1 list_of_data2
# make one list with all the data
dict_games = {genre : {} for genre in set([x[2] for x in complete_list])}
# make a dict of dict with all genres
for game, _, genre, *info in complete_list:
if game in dict_games[genre]:
# check if the game exits on both list of data and sum the info
info = info dict_games[genre][game]
dict_games[genre].update({game: info})
Я думаю, что это самый простой способ, если вы хотите суммировать информацию об одной и той же игре, которая отображается в обоих списках. Но в случае, если вы хотите удалить info, вы можете суммировать список данных по приоритету или если вы хотите создать какое-то правило для удаления info, тогда я предлагаю добавить флаг в структуру данных и использовать его позже при обновлении dict_games . пожалуйста, дайте мне знать, сработало ли это или что-то не так понятно.