回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<pre><code>def formoutput(teams_id, patent_team):
"""
The function to compare team_id and patent_teams to form the default dictionary matching values
:param teams_id: {('3879797-2', '3930281-2'): 1, ('3930282-1', '3930282-2'): 2, ('3930288-1', '3930288-2'): 3, ... }
:param patent_team: {3930281: [[('3879797-2', '3930281-2')]], 3930282: [[('3930282-1', '3930282-2')]], 3930288: [[('3930288-1', '3930288-2')]], ... }
:return: defaultdict(<function formoutput.<locals>.<lambda> at 0x0000022A45228240>, {3930281: defaultdict(<class 'list'>, {'3879797-2': [1], '3930281-2': [1]}), 3930282: defaultdict(<class 'list'>, {'3930282-1': [2], '3930282-2': [2]}), 3930288: defaultdict(<class 'list'>, {'3930288-1': [3], '3930288-2': [3]}), 3930292: defaultdict(<class 'list'>, {'3861607-1': [4], '3861607-2': [4]}), ..}
"""
print("Forming Output")
print("Teams id =", teams_id)
print("Patent_team=", patent_team)
output_dict = defaultdict(lambda: defaultdict(list))
try:
for k,v in teams_id.items():
for a,b in patent_team.items():
for i in b:
if k in i:
for z in k:
output_dict[a][z].append(v)
except Exception as e:
print(e)
return output_dict
</code></pre>
<p>我有一个函数,我以python字典的形式向它传递两个参数。第一个字典的键作为第二个字典的值出现。我需要比较第一个字典中的每个键在第二个字典中是否存在一个值,然后使用键、第一个字典中的值和第二个字典中的键将值附加到defaultdict中。请看一下上面的代码,这将有助于更好地理解代码。
多个嵌套循环使得代码非常慢。我在第一本字典里有超过5000万个键值对。在第二个字典里有超过300万个键,每个键平均包含3个值。你知道吗</p>
<p>代码背后的整个思想是找到所有可能的发明人对,他们曾经以某种组合的方式参与过一项专利的工作,这些组合需要作为{patent\u id:inventor\u team,team\u id}的输出。目前,执行相同的代码需要几个小时。我运行了100000个键值对,大约花了2000秒,这是很长的时间。你知道吗</p>
<p>请为我提供一个最好的整体解决方案可能的方法。还有,处理如此海量数据的最佳方式是什么?你知道吗</p>