как добавить ключ и значение в словарь с помощью цикла for

#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 . пожалуйста, дайте мне знать, сработало ли это или что-то не так понятно.