我在查詢每個不同國家/地區的會話和用戶的Google Analytics數據。我想每天保存這些數據到我的數據庫中,以便稍後訪問。羣組Python列表共同爲公共元素
我的查詢給了我一個非常大的json,我試圖找到optima解決方案來最大化速度。
首先,我設法找回了會議訂購的數據,這意味着我現在只能保存我的分貝中的前10個國家,而不必爲每個國家每天保存一個新行。
我認爲這是爲了獲得有價值的信息而需要的最小數據量。所以我現在我的結構BD接受這樣的數據:
20170101 | US | 112 (sessions) | 111 (users)
20170101 | CA | 111 (sessions) | 221 (users)
... (for 8 more rows)
20170102 | US | 11 (sessions) | 22 (users)
... (and so on, so 10 rows per day)
現在我的大的JSON我回來看起來是這樣的(我已經刪除中間有很多的指標):
m = {
'reports': [{
'data': {
'rowCount': 2003,
'maximums': [{
'values': ['1219', '1109']
}],
'minimums': [{
'values': ['1', '1']
}],
'totals': [{
'values': ['33505', '30382']
}],
'rows': [{
'dimensions': ['20170404', 'US'],
'metrics': [{
'values': ['1219', '1091']
}]
}, {
'dimensions': ['20170406', 'US'],
'metrics': [{
'values': ['1203', '1109']
}]
}, {
'dimensions': ['20170405', 'US'],
'metrics': [{
'values': ['1185', '1073']
}]
}, {
'dimensions': ['20170408', 'PL'],
'metrics': [{
'values': ['2', '1']
}]
}, {
'dimensions': ['20170408', 'SG'],
'metrics': [{
'values': ['2', '2']
}]
}, {
'dimensions': ['20170408', 'TT'],
'metrics': [{
'values': ['2', '2']
}]
}]
},
'nextPageToken': '1000',
'columnHeader': {
'dimensions': ['ga:date', 'ga:countryIsoCode'],
'metricHeader': {
'metricHeaderEntries': [{
'name': 'ga:sessions',
'type': 'INTEGER'
}, {
'name': 'ga:users',
'type': 'INTEGER'
}]
}
}
}]
}
我試圖找出如何我可以每天大部分的會議中提取前10個國家,並保存在我的數據庫這個信息,到目前爲止,我想出了:
x = m['reports'][0]['data']['rows']
l =[]
for data in x:
date = data['dimensions'][0]
country = data['dimensions'][1]
sessions = data['metrics'][0]['values'][0]
users = data['metrics'][0]['values'][1]
n = [date, [country,sessions, users]]
l.append(n)
這產生了我裏面值的列表格式[date[country, sessions, users]]
所以是這樣的:
[['20170404', ['US', '1219', '1091']],
['20170406', ['US', '1203', '1109']],
['20170405', ['US', '1185', '1073']],
['20170408', ['PL', '2', '1']],
['20170408', ['SG', '2', '2']],
['20170408', ['TT', '2', '2']]]
現在我在想嵌套的其他for循環,檢查的日期,如果是相同的它會將值z[1]
添加到同一個列表中,所以對於每個日期我都會有一個包含每個國家/地區值的列表。然而,我不知道如何根據第一個值z[0]
將這些字典組合在一起,再加上這將會做所有的國家,而不僅僅是前10名。
有沒有一種更簡單的方法來完成這個給定的大JSON上面?如果我如何根據第一個值將列表分組在一起,然後如何按會話進行排序?
謝謝!
嗨。這有效,但我怎麼才能將它保存在我的數據庫?例如,我有: ''20170408':{'PL':{'sessions':'2','users':'1'}, 'SG':{'sessions':'2','users ':'2'}, 'TT':{'sessions':'2','users':'2'}}}'爲了遍歷dic並獲取會話等,我需要密鑰(例如PL),但這些一直都在變化,不是嗎? – Costantin
不,我編輯了答案。 –
- 非常感謝! – Costantin