2016-08-21 166 views
0

的列表中的一個通我在Python字典的列表。列表中的每個元素都對應一天,並且字典中的每個元素都有關於用戶逐分鐘活動的信息。不同的櫃檯類型的字典

例子:

list_of_dicts = [ 
    {u'activity': 
     {u'values': [ 
      [1407729600, 3.0], 
      [1407729660, 2.0], 
      [1407729720, 2.0], 
      [1407729780, 3.0], 
      [1407729840, 1.0], 
      [1407729900, 4.0], 
      [1407729960, 2.0], 
      [1407730020, 5.0], 
      [1407730080, 6.0], 
      [1407730140, 2.0], 
      [1407730200, 1.0], 
      [1407730260, 2.0], 
      [1407730320, 1.0], 
      [1407730380, 2.0], 
      [1407730440, 1.0]]}}, 
    {u'activity': 
     {u'values': [ 
      [1407788340, 2.0], 
      [1407788400, 2.0], 
      [1407788460, 3.0], 
      [1407788520, 2.0], 
      [1407788580, 2.0], 
      [1407788640, 2.0], 
      [1407788700, 2.0], 
      [1407788760, 2.0], 
      [1407788820, 2.0], 
      [1407788880, 3.0], 
      [1407788940, 2.0], 
      [1407789000, 3.0], 
      [1407789060, 2.0], 
      [1407789120, 3.0], 
      [1407789180, 3.0], 
      [1407789240, 2.0], 
      [1407789300, 3.0], 
      [1407789360, 3.0], 
      [1407789420, 2.0], 
      [1407789480, 3.0], 
      [1407789540, 2.0]]}}] 

現在,我想有不同的數據集合。例如,我想要計算一週中每天每小時的活動次數。這個我可以用下面的代碼做:

c = Counter() 

step_values_unlist = list(itertools.chain.from_iterable(
          [d['activity']['values'] 
          for d in list_of_dicts])) 

week_hour_dict = [{(time.gmtime(x[0])[3], time.gmtime(x[0])[6]):x[1]} 
        for x in step_values_unlist] 

for d in week_hour_dict: 
    c.update(d) 

雖然這是確定的,我需要做其他聚合也,因爲這是一個特徵向量生成用於後續ML步驟的一部分。舉個例子,我想通過再次讀字典的名單一個新的計數器有周數與活動在所有七天等,這些也可以通過各種計數器單獨完成。然而,這將是耗時的,因爲詞典列表大,這是運行(通過PySpark)爲100萬級+的用戶。我們最好不要多次閱讀這個龐大的詞典列表。有沒有一種方法可以在單一的口令列表中計算這些度量值?

+0

您可以編寫接受一本字典,對值進行操作,並返回一個元組或你想要的聚合一個namedtuple的功能? – wwii

回答

0

糾正我,如果我錯了,但如下我想總結一下你的問題:

有沒有一種方法來計算類型的字典列表中的一個單行程多操作?

在一般情況下,這應該不是真正的問題。如果你計算15個操作,你將不得不對每個元素進行15次不同的計算。

在當你有你的每一個指標的操作的詳細想法的情況下,你可以分解出一些操作來消除冗餘的工作。例如,爲了規範化目的,您可能需要考慮多個度量標準中的每分鐘平均值。您可以自己編寫函數,以便他們可以共享這個平均值:首先計算並將其傳遞給每個函數。