2017-06-21 175 views
0

嘗試將列表附加到字典時,我偶然發現了一些我不太明白的東西。我試圖追加到嵌套字典的值,但我的輸出是奇怪的。Python添加到嵌套字典中的列表

對於輸入,每個list[index]對應於other_list[index]

INPUTS

timestamp = [1450625399, 1450625399, 1450625399, 1450625399, 1450625399, 1450625399, 1450625399, 1450625399, 1450625399, 1450625399] 
instrument = ["AAPL", "AAPL", "AAPL", "HPQ", "AAPL", "HPQ", "AAPL", "HPQ", "AAPL", "AAPL"] 
side   = ["sell", "sell", "buy", "buy", "buy", "buy", "buy", "buy", "buy", "sell"] 
price  = [1, 10, 2, 9, 3, 8.8, 4.44, 7, 5, 6] 
size   = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

方法

import datetime 
import collections 

def timestamp_to_date(stamp): 
    return datetime.datetime.fromtimestamp(stamp).strftime('%Y-%m-%d') 

def dailyOHLC(timestamp, instrument, side, price, size): 
    out = [] 
    dates = collections.defaultdict(dict) 

    for i in range(len(timestamp)): 
     try: 
      dates[timestamp_to_date(timestamp[i])][instrument[i]].append([side[i], price[i], size[i]]) 
     except: 
      dates[timestamp_to_date(timestamp[i])][instrument[i]] = [side[i], price[i], size[i]] 
    print dict(dates) 

我可能失去了一些東西很明顯,但我的電流輸出爲

output @print = {'2015-12-20': {u'AAPL': [u'sell', 1, 1, [u'sell', 10, 2], [u'buy', 2, 3], [u'buy', 3, 5], [u'buy', 4.44, 7], [u'buy', 5, 9], [u'sell', 6, 10]]}}

雖然我希望這樣的事情

expected @ print = {'2015-12-20': {u'AAPL': [[u'sell', 1, 1], [u'sell', 10, 2], [u'buy', 2, 3], [u'buy', 3, 5], [u'buy', 4.44, 7], [u'buy', 5, 9], [u'sell', 6, 10]]}}

我的問題出在格式[... ,[...],[...]]而不是[[...],[...],[...]]嵌套列表之中。

+0

當前輸出爲'[a,b,c,[a,b,c],[a,b,c]]',而我想以不同的方式對它進行迭代, list ...所以我正在尋找一個像[[a,b,c],[a,b,c],[a,b,c]]的輸出'' – Ludisposed

回答

0

如果您的時間戳對於單個事務都是相同的,那麼您不必每次都將其轉換爲日期。

但是,主要的問題是在這裏:

except: 
    dates[timestamp_to_date(timestamp[i])][instrument[i]] = [[side[i], price[i], size[i]]] 
    # ______________________________________________________^----------------------------^ 

你錯過了這些額外的支撐。

+0

謝謝!這總是簡單的東西,讓我... – Ludisposed

+0

@Ludisposed燁,在那裏很多時間......歡呼聲。 –