2017-07-06 67 views
3

我是新來的python和使用字典和列表。 這裏是清單創建一個詞典,其中包含摘要值列表/組合兩個不同的字典來彙總值

detail = [(1, [u'apple', u'2017-07-03T08:03:32Z', 'boston']), 


(2, [u'orange', u'2017-07-03T08:58:35Z', 'NOLOCATION']), 


(3, [u'grape', u'2017-07-03T12:14:12Z', 'boston']), 


(4, [u'cherry', u'2017-07-04T13:16:44Z', 'new york']), 


(5, [u'strawberry', u'2017-07-06T10:56:22Z', 'san francisco']), 


(6, [u'plum', u'2017-07-06T10:56:22Z', 'seattle'])] 

我想總結這一點,讓 - 每個日期,我得到每個位置分割計數。事情是這樣的 -

details_summary = {'2017-07-03':[(boston,2), (NOLOCATION,1)], '2017-07-04': 
[new york,1], '2017-07-06':[(san francisco,1),(seattle,1)]} 

我想在這種格式,因爲我想爲每一個日期(密鑰)地圖(可視化),和位置點(值)。

我結束了創建看起來像這樣兩種不同的字典 -

location = {u'boston': 2, 'NOLOCATION': 1, u'new york': 1, u'san francisco': 
1, u'seattle': 1} 

date = {'2017-07-03':3, '2017-07-04':1, '2017-07-06':2} 

現在,我想總結一下,讓我得到的,在不同的位置計數的分裂每個日期,我困在這裏。

回答

3
from collections import Counter 
d = {} 
for k, (w, t, l) in detail: 
    date = t.split('T')[0] # you can choose to enhance date "isolation" 
    if date in d: 
     d[date].append(l) 
    else: 
     d[date] = [l] 
details_summary = {k: Counter(d[k]).items() for k in d.keys()} 
+0

這返回** 'INT' 對象不是可迭代**在第2行錯誤(對於k,(W,T,L)詳細:) – Newbie

+0

@Newbie在違規循環之前放置一個'print(detail)'來檢查'detail'變量的值。也許你用一個'int'意外覆蓋了它? –

+0

好吧..但我想波士頓,紐約等的數量(發生次數),而不是他們的關鍵。 – Newbie

1

製作使用Python集合defaultdictCounter

from collections import defaultdict, Counter 
summary = defaultdict(list) 
for item in detail: 
    summary[item[1][1].split('T')[0]].append(item[1][2]) 

details_summary = {str(k):[(x,y) for x,y in Counter(v).iteritems()] for k,v in summary.iteritems()} 
print details_summary 
{'2017-07-06': [('san francisco', 1), ('seattle', 1)], '2017-07-04': [('new york', 1)], '2017-07-03': [('boston', 2), ('NOLOCATION', 1)]} 
+0

這工作。謝謝。 – Newbie

相關問題