у меня есть словарь
boxes {
'box 1' : 'apples',
'box 2' : 'mangoes',
'box 3' : 'oranges',
'box 4' : 'mangoes'
}
Мне нужно перегруппировать этот словарь как
fruits {
'apples' : {'box 1' },
'mangoes' : {'box 2', 'box 4'},
'oranges' : {'box 3'}
}
Я попытался:
fruits = {}
for k, v in boxes.items():
if (v in fruits):
fruits[v].add(k)
else:
fruits[v] = set()
fruits[v].add(k)
Я получаю эту ошибку: TypeError: unhashable type: 'set', и многие другие попытки также не работают. Пожалуйста, направляйте! Спасибо






Это хороший случай для использования setdefault следующим образом:
boxes = {
'box 1' : 'apples',
'box 2' : 'mangoes',
'box 3' : 'oranges',
'box 4' : 'mangoes'
}
fruits = dict()
for k, v in boxes.items():
fruits.setdefault(v, set()).add(k)
print(fruits)
Выход:
{'apples': {'box 1'}, 'mangoes': {'box 2', 'box 4'}, 'oranges': {'box 3'}}
К сожалению, по-прежнему возникает та же ошибка fruit.setdefault(v, set()).add(k) TypeError: unhashable type: 'set'
@ABCode Вы пытались запустить код, показанный в моем ответе?
да, скопипастил то же самое. используя spyder 5, Python 3.7.9
@ABCode Создайте скрипт с содержимым этого ответа и запустите его из командной строки. Я подозреваю что-то странное со Spyder, но я им не пользуюсь. Показанный код — это чистый Python. Я не использую устаревшую версию Python, поэтому не могу сказать, проблема ли это в вашей версии, но я в этом сомневаюсь.
Я только что установил Spyder 5.3.0 и запустил этот код без проблем. Проблема, которую вы видите, может возникнуть Только, если переменная в является набором
– Ланселот дю Лак СПАСИБО !! Это сработало. Я запускал через терминал. Перезапущенный Spyder, и он тоже побежал туда! Странно, но счастливо.
То, что вы опубликовали, работает, несмотря на отсутствие
=в первых фрагментах. Эта ошибка типа предполагает, что вы пытались использовать набор как ключ, а не ценность.