У меня есть следующий словарь, который отображает слово на частоту, с которой это слово появляется в тексте:
{'loves' : 3, 'coding' : 3}
слова «любит» и «кодирование» встречаются в тексте 3 раза и поэтому имеют одинаковое значение. Теперь мы знаем, что если мы хотим поменять местами ключи и значения в этом словаре, он вернет это:
либо
{3:'loves'}
или это
{3:'coding'}
потому что идентичные ключи не допускаются в словаре
Теперь мой вопрос: как поменять местами ключи и функции в словаре, избегая дублирования ключей следующим образом:
{3: {'loves', 'coding'}}
Это моя неудачная попытка:
def func(text, words):
d = dict()
for word in text.split():
if word in words:
if word in d:
d[word] += 1
elif word not in d:
d[word] = 1
# return d
newDict = dict()
for key in d:
newKey = d[key]
newDict[newKey] = set()
newDict[newKey].add(key)
return newDict
Редактировать:
Спасибо за все ваши ценные ответы. Я также заставил мою работать, исправив следующую ошибку: рядом с ошибочной строкой добавлен комментарий
# swapping keys and values in a dictionary:
newDict = dict()
def func(text, words):
d = dict()
for word in text.split():
if word in words:
if word in d:
d[word] += 1
elif word not in d:
d[word] = 1
# return d
newDict = dict()
for key in d:
if d[key] not in newDict:
newDict[d[key]] = set({key}) # This was my bug. Initially I had
# newDict[d[key]] = set()
elif d[key] in newDict:
newDict[d[key]].add(key)
return newDict
Теперь, если я запускаю его на следующем входе:
func('Ahmed loves loves coding coding is rewarding', {'loves', 'coding', 'I'})
Я получаю это именно то, что я хотел:
{2: {'coding', 'loves'}}