2010-03-16 59 views
0

我有看起来像这样的数据对象:通过此数据对象搜索最快的方法? (蟒)

{ 
     'node-16': { 
      'tags': ['cuda'], 
      'localNodes': [ 
       { 
        'name': 'nC', 
        'consumesFrom': ['nA', 'nB'], 
        'classType': 'VectorAdder.VectorAdder' 
       }, 
       { 
        'name': 'nB', 
        'consumesFrom': None, 
        'classType': 'RandomVector' 
       } 
      ] 
     }, 
     'node-17': { 
      'tags': ['boring'], 
      'localNodes': [ 
       { 
        'name': 'nA', 
        'consumesFrom': None, 
        'classType': 'RandomVector' 
       } 
      ] 
     } 
    } 

注意,节点NA为NC生产商。查找给定localNode是否是数据结构中另一个localnode(不在同一列表中)的生产者的最快方法是什么?

例如,我想知道nA(node-17)产生nC(存在于node-16上)。但我不需要知道nB为nC生成,因为它们存在于相同的localNodes列表中。

+0

列表有多大?多少个“node-xx”?您是否正在寻找计算速度最快的代码? – 2010-03-16 18:38:05

+0

我想大多数是“pythonic”的方式。我可以一起攻击一些东西,但它太难看了。可能总共有16个节点,总共有35个localNode。 – victor 2010-03-16 18:38:49

回答

1
namedict = dict((x['name'], y) for y in data for x in data[y]['localNodes']) 
proddict = dict((z['name'], [y for y in z['consumesFrom'] if namedict[y] != x]) 
    for x in data for z in data[x]['localNodes'] if z['consumesFrom'] is not None) 

print 'nA' in proddict['nC'] 
+0

我认为这可能与我的想法并没有本质上的不同,但我认为嵌套在字典理解形式的循环有点密集。你可以使用更多的线,没关系! – keturn 2010-03-16 18:54:05