我需要反转一个列表字典,不知道用英语怎么解释,这里有一些代码可以实现我想要的功能。但是它占用了太多的内存。
def invert(oldDict):
invertedDict = {}
for key,valuelist in oldDict.iteritems():
for value in valuelist:
try:
entry = invertedDict[value]
if key not in entry:
entry.append(key)
except KeyError:
invertedDict[value] = [key]
return invertedDict
原始数据是一个列表的字典,结果也是一个列表的字典。这样做相当于“翻转”它。
test = {}
test[1] = [1999,2000,2001]
test[2] = [440,441]
test[3] = [440,2000]
print invert(test)
这将会得到:
{2000: [1, 3], 2001: [1], 440: [2, 3], 441: [2], 1999: [1]}
我需要知道是否可以就地完成此操作,因为我目前的策略使用的字典已超出了我的机器可用的物理内存。您能否考虑使用生成器来完成此操作?
shelve
吗? - S.Lott