2015-12-15 83 views
1

所以在這裏特別項目是我defaultdict計數在defaultdict列表

#x = {lead_id:[[month,pid,year]] 
x={'123':[[1,9,2015],[2,9,2015]],'345':[[2,10,2015],[2,13,2014]],'159':[1,3,2015].....} 

我在這本字典超過1000層lead_id的結構。每一個都有隨機數量的列表。換句話說,相同的lead_id具有重複但具有不同月份或pid或年份。現在我想要統計2015年1月份的所有lead_id。如果根據它的發生次數計算它的兩倍或更多,我想將它計爲兩次。任何人都可以請幫我弄清楚我如何製作一個自動化代碼,以便它能檢查這個長度以及同一年發生的那個月的次數。

For example: 
x={'123':[[1,3,2015],[2,5,2014],[1,5,2015]],'987':[[3,55,2014]],'456':[[1,37,2015]]} 
count of jan 2015 = 3 

回答

2

你可以做索引值條件句。 date[0]是1月date[2]是2015年

#!/usr/bin/python 

x={'123':[[1,3,2015],[2,5,2014],[1,5,2015]],'987':[[3,55,2014]],'456':[[1,37,2015]]} 

#Set query dates 
query_month = 1 #jan 
query_year = 2015 #year 

#Set a counter 
jan_counts = 0 
for list_of_dates in x.values(): 
    for date in list_of_dates: 
     if (date[0] == query_month) and (date[2] == query_year): 
      jan_counts += 1 
print jan_counts 
#3 
+1

其他的代碼基本上做同樣的事情,但他們「更Python化」。我試圖通過拆分步驟來儘可能簡化可視化過程,以便了解其他答案中的單行代碼如何工作。 –

+1

謝謝O.rka ....我真的很感謝 – Shubham

1

這應該給你的結果:

>>> day = 1 
>>> year = 2015 
>>> x = {'123':[[1,3,2015],[2,5,2014],[1,5,2015]],'987':[[3,55,2014]],'456':[[1,37,2015]]} 
>>> sum([1 for k, v in x.iteritems() for i in v if i[0] == day and i[2] == year]) 
3 
5

您可以使用此也...

sum(1 for i in x for j in x[i] if j[0] == 1 and j[2] == 2015) 
+1

沒有必要建立一個清單只是爲了總結 –

+1

@PadraicCunningham是的,同意! –