股票是一个字典():
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(',')
答案 0 :(得分:1)
您可以尝试的一件事是,而不是使用计数器来迭代字典值本身,只返回状态为Active
的投资组合。当您发现自己需要检查特定数据结构中的所有项目时,通常最容易迭代结构本身而不是使用计数器(即说for item in iterable
而不是for x in range(len(iterable)): iterable[x]
):< / p>
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
使用list comprehension生成,该{{3}}遍历stocks
字典的值并仅返回x[1]
(状态,在您的情况下) )等于Active
。