[英]Python - Tuple to grouped Dict
因此,我從數據庫返回了這個元組,它顯示了用戶每天總共登錄了多少次。
mytuple =
(
('jim', datetime.date(2017, 2, 10), 1L),
('jeff', datetime.date(2017, 2, 11), 1L),
('jeff', datetime.date(2017, 2, 12), 1L),
('jeff', datetime.date(2017, 2, 13), 1L),
('jeff', datetime.date(2017, 2, 14), 26L)
)
如何以這種方式將其格式化為Dict / Json?
mydict = {
{
name: 'jeff',
data: [
[(2017, 2, 11), 1],
[(2017, 2, 12), 1],
[(2017, 2, 13), 1],
[(2017, 2, 14), 26]
]
},
{
name: 'jim',
data: [
[(2017, 2, 10), 1]
]
}
}
您還可以使用itertools
庫,它具有groupby
功能。 希望一旦擁有更大的數據集,它將更快。 但是,輸出將是列表而不是字典,與您要求的完全不同。
import datetime
from itertools import groupby
mytuple = [('jim', datetime.date(2017, 2, 10), 1),
('jeff', datetime.date(2017, 2, 11), 1),
('jeff', datetime.date(2017, 2, 12), 1),
('jeff', datetime.date(2017, 2, 13), 1),
('jeff', datetime.date(2017, 2, 14), 26)]
group_dict = []
for key, group in groupby(mytuple, lambda x: x[0]):
group_dict.append({'name': key, 'data': [[g[1], g[2]] for g in group]})
在這里,您要進行groupby
並使用元組的第一個鍵為其提供功能,例如,在這里lambda x: x[0]
。 在這種情況下,數據是每個組索引1和2的元素。
您還可以使用元組格式的轉換日期時間,如下所示:
group_dict = []
for key, group in groupby(mytuple, lambda x: x[0]):
data = [[(g[1].year, g[1].month, g[1].day), g[2]] for g in group]
group_dict.append({'name': key, 'data': data})
import datetime
import json
mytype = (
('jim', datetime.date(2017, 2, 10), 1L),
('jeff', datetime.date(2017, 2, 11), 1L),
('jeff', datetime.date(2017, 2, 12), 1L),
('jeff', datetime.date(2017, 2, 13), 1L),
('jeff', datetime.date(2017, 2, 14), 26L)
)
mydict = {}
for name, date, count in mytype:
if name not in mydict:
mydict[name] = []
mydict[name].append(((date.year, date.month, date.day), count))
print mydict
print json.dumps(mydict)
您可以使用以下內容:
import datetime
import json
mytype = (
('jim', datetime.date(2017, 2, 10), 1L),
('jeff', datetime.date(2017, 2, 11), 1L),
('jeff', datetime.date(2017, 2, 12), 1L),
('jeff', datetime.date(2017, 2, 13), 1L),
('jeff', datetime.date(2017, 2, 14), 26L)
)
output = []
def date_to_ymd_tuple(input_date):
return (input_date.year, input_date.month, input_date.day)
for user in set(item[0] for item in mytype):
output.append({'name': user,
'data': [[date_to_ymd_tuple(x[1]), x[2]] for x in mytype if x[0] == user]
})
print output
with open('output.txt', 'w') as f:
json.dump(output, f)
這將寫出來
[{"data": [[[2017, 2, 10], 1]], "name": "jim"}, {"data": [[[2017, 2, 11], 1], [[2017, 2, 12], 1], [[2017, 2, 13], 1], [[2017, 2, 14], 26]], "name": "jeff"}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.