Как я могу объединить ключи и значения в словаре?

#python-3.x #dictionary

#python-3.x #словарь

Вопрос:

У меня есть следующие данные, которые имеют такую форму:

 {"('INTJ', 'INTP')n": 3,
 "('INFJ', 'ENFP')n": 3,
 "('ENFP', 'ENTJ')n": 13,
.
.
.
 "('ENFP', 'ENFJ')n": 11,
 "('ENFP', 'ESFP')n": 4,
 "('ENFP', 'INTJ')n": 8,
 "('ENFP', 'ESTP')n": 2,}
  

который хранится в словаре, например:

 myDict = {('ENFP', 'ESTP')n:2,...,('ENFP', 'INTJ')n": 8}

  

где ('ENFP', 'INTJ')n строка, а значение — целое число. В данных есть совпадения, в которых ('ENFP', 'ESFP')n есть значение, а ('ESFP','ENFP')n также другое значение, но они практически дублируются!. Однако это только конкретный пример, и есть много других случаев для разных типов личности. Моя цель — в конечном итоге иметь только один из этих ключей, но чтобы этот ключ был объединенными значениями всех сопоставленных ключей. И я хочу сделать это для каждого ключа. Я пробовал что-то вроде этого:

 for personality_1 in (total_personality_count_dict):

    for personality_2 in (total_personality_count_dict):

        if((personality_2[10:14] == personality_1[2:6]) and (personality_2[2:6] == personality_1[10:14]) and (personality_1[2:6] != personality_2[2:6])):

            update = {personality_1:total_personality_count_dict[personality_1] total_personality_count_dict[personality_2]}

            total_personality_count_dict.update(update)

            total_personality_count_dict.pop(personality_2)
  

но я получаю сообщение об ошибке, что словарь изменяет размер во время итерации. Заранее спасибо за помощь.

Комментарии:

1. "('INTJ', 'INTP')n" это странный способ хранения ключа. Вы имели в виду использовать такие кортежи, как ('INTJ', 'INTP') ?

Ответ №1:

Это говорит вам, что не так: вы не можете изменить размер total_personality_count_dict во время итерации по нему. Вы не можете использовать pop() . Поскольку вы выполняете сложение, вместо этого вы можете обновить значение поля, которое вы хотите «удалить», до 0, поэтому любое последующее добавление, выполненное с ним, не будет иметь никакого эффекта.

 total_personality_count_dict[personality_2] = 0
  

И если вы хотите, чтобы словарь был без personality_2 словаря, создайте новый словарь и сохраните обновления, которые вы хотите сохранить там вместо этого.