【发布时间】:2011-03-25 23:52:52
【问题描述】:
我需要反转一个列表字典,我不知道如何准确地用英语解释它,所以这里有一些代码可以满足我的需求。只是占用了太多内存。
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吗? -
我不知道搁置,谢谢。我猜新旧词典都不需要满载就可以操作吧?
-
shelve 仅适用于字符串键。不过你可以解决它
标签: python list hashtable generator