使用原始字典值中的值集反转字典

时间:2016-07-11 15:45:46

标签: python dictionary set

我一直试图反转一个Python字典,即从原始字典中获取所有值,得到一个唯一的集合并将它们用作新字典的键。新键的值应该是原始dict键的列表,其中新的dict键为值。

当然有更好的方法,但我提出了:

myDict1 = {'foo0':'alpha','foo1':'alpha','bar0':'beta','bar4':'beta'}
tmpDict = dict.fromkeys(set(myDict1.values()),[])
for thingy in myDict1.keys():
    tmpDict[myDict1[thingy]].append(thingy)
print(tmpDict)

tmpDict作为:

{'alpha': ['bar0', 'foo0', 'foo1', 'bar4'], 'beta': ['bar0', 'foo0', 'foo1', 'bar4']}

这不是预期的词典:

{'alpha': ['foo0', 'foo1'], 'beta': ['bar0', 'bar4']}

错误在哪里?

1 个答案:

答案 0 :(得分:1)

使用fromkeys时,所有键都指向同一个对象。在这种情况下,列表:

dict.fromkeys(set(myDict1.values()),[])

我建议使用:

dict((k, []) for k in set(myDict1.values()))

这会为每个密钥创建一个新列表。