我有以下字典将单词映射到该单词在文本中出现的频率:
{'loves' : 3, 'coding' : 3}
单词'loves'和'coding'在文本中出现了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'}}
答案 0 :(得分:1)
首先,
单词'loves'和'coding'在文本中出现了3次,因此具有相同的密钥。
它们实际上具有相同的值,而不是相同的键(可能你错误输入了它?)。
但你可以做一个简单的word2vec
- 循环,然后是一个简单的逻辑,你首先检查你的新for
中是否存在该值;它确实如此,附加了它们的价值;如果没有,请创建一个新条目。
dict
答案 1 :(得分:0)
与@ RafaelC的回答一样,只使用集合:
d = {'loves' : 3, 'coding' : 3}
new_dict = {}
for key, value in d.items():
if value not in new_dict:
new_dict[value].add(key)
else:
new_dict[value] = {key}