【发布时间】:2018-04-16 14:58:35
【问题描述】:
我有非常多的集合(数千个),每个集合对应一个具有 id 的代理(实体) - 这可以表示为一个字典,其中每个 agent_id(键)都有一个集合(值)。
agent_path= {a1: (25, 60, 86, 95), a2: (72, 34, 96, 60, 12, 74, 95, 43, 78), a3: ....}
我需要找到不同集合的交集,更重要的是,找出哪些代理相互交集。
a1 ∩ a2:60、95
这可以例如存储在新字典中。在下一步中,我将不得不再次循环遍历具有相交元素的每个代理以执行下一个操作。
我的解决方案是在 agent_path 字典上循环 x2 并单独比较每个集合,然后将结果保存到字典中:
agent_path=dict()
agent_path['a1']=a
agent_path['a2']=b
agent_inters=dict()
for agent1 in agent_path.keys():
for agent2 in agent_path.keys():
agent_key=str(agent1)+str(agent2)
if agent1 == agent2:
pass
else:
set1=set(agent_path[agent1])
set2=set(agent_path[agent2])
set1xset2=set1.intersection(set2)
agent_inters[agent_key]=set1xset2
有没有更有效的方法来做到这一点?特别是,因为我将不得不对大量集合和多次执行此操作(集合在模型中的每个时间步更新)。
【问题讨论】:
-
请让我们知道答案是否足以通过接受它来帮助解决您的需求。如果没有,请告诉我们如何改进。
标签: python python-3.x performance set set-intersection