1

株式はdict()です:

stocks[0]: [u'portfolio1', u'Active']
stocks[1]: [u'portfolio2', u'Active']
stocks[2]: [u'portfolio3', u'Inactive']

株式[0][1]、株式[1][1]、および株式[2][1]であるポートフォリオのステータスを確認し、アクティブなポートフォリオのみを含む要素のリストを作成しようとしています。

そして、カウンターを使用して反復を行っていますが、これは非常に遅いプロセスのようです。このコードをループする最も効率的な方法は何ですか?

a = 0
test = {}
while a <= 500:
    try:
        if stocks[a][1] == 'Active':
            test[a] = stocks[a][0]
            print test[a]
            a +=1
        else:
            pass
            a +=1
    except KeyError:
        break

test = list(test.values())
test = str(','.join(test)).split(',')
4

1 に答える 1

1

カウンターを使用する代わりに、ディクショナリの値自体を反復処理して、ステータスが のポートフォリオのみを返すこともできますActive。特定のデータ構造内のすべての項目をチェックする必要がある場合は、通常、カウンターを使用する代わりに構造自体を反復処理するのが最も簡単です (つまり、のfor item in iterable代わりに言うfor x in range(len(iterable)): iterable[x])。

In [1]: stocks = {
   ...:     0: [u'portfolio1', u'Active'],
   ...:     1: [u'portfolio2', u'Active'],
   ...:     2: [u'portfolio3', u'Inactive']
   ...: }

In [2]: actives = [x[0] for x in stocks.itervalues() if x[1] == 'Active']

In [3]: actives
Out[3]: [u'portfolio1', u'portfolio2']

activesこの原因では、辞書の値を反復処理し、(あなたの場合はステータス)が等しいものだけを返すリスト内包表記を使用して生成されます。stocksx[1]Active

于 2012-12-22T09:42:35.233 に答える