搜索此数据对象的最快方法是什么? (蟒蛇)

时间:2010-03-16 18:30:19

标签: python

我有一个如下所示的数据对象:

    {
        '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列表中。

1 个答案:

答案 0 :(得分: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']