这不适用,但使用popitem()消耗oldDict
from collections import defaultdict
def invert(oldDict):
invertedDict = defaultdict(list)
while oldDict:
key, valuelist = oldDict.popitem()
for value in valuelist:
invertedDict[value].append(key)
return invertedDict
我有一种感觉,除非尺寸增加,否则dict的尺寸永远不会调整,所以你可能需要定期添加删除虚拟物品.见Shrinkage rate
from collections import defaultdict
def invert(oldDict):
invertedDict = defaultdict(list)
i=0
while oldDict:
key, valuelist = oldDict.popitem()
for value in valuelist:
invertedDict[value].append(key)
i+=1
if i%1000==0: # allow the dict to release memory from time to time
oldDict[None]=None
del oldDict[None]
return invertedDict