2012-12-22 58 views
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(',') 

回答

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在這個原因是使用list comprehension產生的,它遍歷stocks字典的值,並只返回那些x[1](在你的情況下,狀態)等於Active的那些。