我有一张表格:
dict1[element1] : reference1
dict1[element2] : reference2
dict1[element3] : reference2
有些元素有相同的引用(比如element2
和element3
有)。
我需要把它转换成如下形式的dict:
dict2[reference1] : [element1]
dict2[reference2] : [element2,element3]
为了得到这个,我写了:
dict2=dict()
for key in dict1:
UpdateDict(dict2,dict1[key],key)
def UpdateDict(Dict,Key,Entry):
Keys = list(Dict.keys())
if Key in Keys:
Dict[Key].append(Entry)
return
else:
Item = list()
Item.append(Entry)
Dict[Key] = Item
return
在dict1
不是很大之前,这种方法可以正常工作,但是如果dict1
很大(大约1000个键),则需要几个小时才能得到结果。你知道吗
有没有更快的方法?你知道吗
您可以使用
defaultdict
或dict.setdefault
:对于这样一个简单的调用,函数似乎是不必要的。你知道吗
使用^{} 而不是普通的dict来避免这些成员身份检查,您可以删除函数调用,这会增加重复调用的不小开销:
这是:
可能是罪魁祸首。它将O(1)查找(
if Key in Dict:
)转换为O(n)查找。这加上每个键一个函数调用的开销确实是次优的。你知道吗一个更简单的解决方案是使用
collections.defaultdict
:相关问题 更多 >
编程相关推荐