我有以下字典:{26:['hello', 'test'], 27:['hello', 'good', 'morning', 'test']}
我需要创建一个新字典,将单词作为关键字,并将值作为值存在的列表作为值,它应该像这样:dict1 = {'hello':[26,27], 'test':[26,27], 'good':[27], 'morning':[27]}
为了解决我的问题,我已经创建了一个列表,其中所有单词都没有重复,所以words = ['hello', 'test', 'good', 'morning']
。然后我尝试了这个:
newdict = {}
for i in words:
l = []
for k in dict1:
if i in dict1[k]:
l.append(k)
newdict[i] = l
你能帮我吗?预先感谢。
答案 0 :(得分:3)
这是将{k:[v]}
变成{v:[k]}
的反转操作:
output = {}
for k,v in input.items():
for e in v:
output.setdefault(e, []).append(k)
答案 1 :(得分:2)
使用collections.defaultdict
例如:
from collections import defaultdict
data = {26:['hello', 'test'], 27:['hello', 'good', 'morning', 'test']}
result = defaultdict(list)
for k, v in data.items():
for item in v:
result[item].append(k)
print(result)
使用setdefault
例如:
result = {}
for k, v in data.items():
for item in v:
result.setdefault(item, []).append(k)
输出:
defaultdict(<type 'list'>, {'test': [26, 27], 'good': [27], 'hello': [26, 27], 'morning': [27]})
{'test': [26, 27], 'good': [27], 'hello': [26, 27], 'morning': [27]}
答案 2 :(得分:2)
没有导入,您可以这样操作:
a = {26:['hello', 'test'], 27:['hello', 'good', 'morning', 'test']}
result = {}
for k, v in a.items():
for item in v:
result[item] = result.get(item, []) + [k]
here解释了dict. get(key[, default])
。
因此,您的结果字典将返回其值或空列表。
此后,您可以简单地使用+
运算符,如果是列表,该运算符是串联运算符。
请注意,列表串联仅在列表之间起作用,因此我们将值包装在[]
中,使其成为包含键的列表。