1

股票是一个字典():

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在这个原因是使用列表推导生成的,该列表推导遍历stocks字典的值并仅返回那些x[1](在您的情况下为状态)等于的值Active

于 2012-12-22T09:42:35.233 回答