#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
словаря, создайте новый словарь и сохраните обновления, которые вы хотите сохранить там вместо этого.