如何创建一个字典来显示另一个字典的值属于哪个键

时间:2019-06-05 13:03:20

标签: python

我有以下字典:{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

你能帮我吗?预先感谢。

3 个答案:

答案 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])。 因此,您的结果字典将返回其值或空列表。

此后,您可以简单地使用+运算符,如果是列表,该运算符是串联运算符。

请注意,列表串联仅在列表之间起作用,因此我们将值包装在[]中,使其成为包含键的列表。