擅长:python、mysql、java
<p>根据您的示例数据,这里有一个我认为可能有用的示例:</p>
<pre><code>edges = {
1: [(12.8254, 55.3880), (12.8343, 55.3920)],
2: [(12.8254, 55.3880), (12.8235, 55.3857)],
3: [(12.2432, 57.1120), (12.2426, 57.1122)]}
nodes = {
14: (12.8254, 55.3880),
15: (12.8340, 55.3883),
16: (12.8235, 55.3857),
17: (12.8343, 55.3920)}
reverseNodes=dict((v,k) for k, v in nodes.iteritems())
edgesList=[]
for k,v in edges.items():
edgesList.append(
(k,
reverseNodes.get(v[0], -1),
reverseNodes.get(v[1], -1)))
</code></pre>
<p>也许我不明白你建造的<code>edgesList</code>但我认为这看起来更简单、更快。在</p>
<p>再次根据示例代码,这是消耗cpu时间的原因:</p>
^{pr2}$
<p>这存在于for循环中,因此对于每个边,您:</p>
<ul>
<li>在边列表上多迭代一次(以找到已有的edge id)</li>
<li>在nodes列表上迭代两次以查找起点和终点(您不再需要这样做了,因为我们已经了解了如何使用reverseNodes dict进行直接查找)。在</li>
</ul>
<p>所以用你的数据大小,你应该得到大约100000*(100000+90000+90000)或者O(n^2)操作,这比仅仅一次通过边缘(100000或O(n))要多得多</p>