my question is, how can group dict key, value on same key. group different values based on key, better explanation provide in code.
dict
values = [{ "date": "2015-05-07", "yt": 630.0 }, { "date": "2015-05-07", "fb": 16555.0 }, { "date": "2015-05-07", "tw": 1234.0 }]
here example of dictionary. want check date , if date exists somewhere in dictionary collect values on same date. output like:
values = [ { "date":"2015-05-07", "fb":16555.0, "tw":1234.0, "yt":630 }
the whole dic:
values=[ { "date": "2015-04-24", "fb": 16322.0 }, { "date": "2015-04-24", "tw": 1206.0 }, { "date": "2015-04-28", "tw": 1215.0 }, { "date": "2015-04-30", "tw": 1224.0 }, { "date": "2015-04-30", "fb": 16408.0 }, { "date": "2015-05-01", "tw": 1226.0 }, { "date": "2015-05-01", "fb": 16436.0 }, { "date": "2015-05-02", "tw": 1227.0 }, { "date": "2015-05-02", "fb": 16451.0 }, { "date": "2015-05-04", "fb": 16506.0 }, { "date": "2015-05-04", "tw": 1229.0 }, { "date": "2015-05-05", "tw": 1232.0 }, { "date": "2015-05-05", "fb": 16526.0 }, { "date": "2015-05-06", "tw": 1232.0 }, { "date": "2015-05-06", "fb": 16541.0 }, { "date": "2015-05-07", "yt": 630.0 }, { "date": "2015-05-07", "fb": 16555.0 }, { "date": "2015-05-07", "tw": 1234.0 }, { "date": "2015-05-08", "fb": 16568.0 }, { "date": "2015-05-08", "tw": 1238.0 }, { "date": "2015-05-09", "fb": 16582.0 }, { "date": "2015-05-09", "tw": 1237.0 }, { "date": "2015-05-10", "fb": 16594.0 }, { "date": "2015-05-10", "tw": 1237.0 }, { "date": "2015-05-11", "tw": 1242.0 }, { "date": "2015-05-11", "fb": 16600.0 }, { "date": "2015-05-12", "tw": 1243.0 }, { "date": "2015-05-12", "fb": 16618.0 }, { "date": "2015-05-13", "fb": 16630.0 }, { "date": "2015-05-13", "yt": 630.0 }, { "date": "2015-05-13", "tw": 1246.0 }, { "date": "2015-05-14", "yt": 630.0 }, { "date": "2015-05-14", "fb": 16635.0 }, { "date": "2015-05-14", "tw": 1249.0 }, { "date": "2015-05-15", "yt": 630.0 }, { "date": "2015-05-15", "fb": 16644.0 }, { "date": "2015-05-15", "tw": 1252.0 }, { "date": "2015-05-16", "yt": 630.0 }, { "date": "2015-05-16", "tw": 1254.0 }, { "date": "2015-05-16", "fb": 16654.0 }, { "date": "2015-05-17", "tw": 1255.0 }, { "date": "2015-05-17", "fb": 16668.0 }, { "date": "2015-05-17", "yt": 630.0 }, { "date": "2015-05-18", "yt": 632.0 }, { "date": "2015-05-18", "tw": 1257.0 }, { "date": "2015-05-18", "fb": 16678.0 }, { "date": "2015-05-19", "fb": 16688.0 }, { "date": "2015-05-19", "yt": 634.0 }, { "date": "2015-05-19", "tw": 1256.0 }, { "date": "2015-05-20", "yt": 634.0 }, { "date": "2015-05-20", "fb": 16695.0 }, { "date": "2015-05-20", "tw": 1259.0 }, { "date": "2015-05-21", "tw": 126.0 }, { "date": "2015-05-21", "yt": 635.0 }, { "date": "2015-05-21", "fb": 16698.0 }, { "date": "2015-05-22", "tw": 1262.0 }, { "date": "2015-05-22", "fb": 16712.0 }, { "date": "2015-05-22", "yt": 635.0 }, { "date": "2015-05-23", "fb": 16726.0 }, { "date": "2015-05-23", "yt": 636.0 }, { "date": "2015-05-23", "tw": 1264.0 }, { "date": "2015-05-24", "tw": 1265.0 }, { "date": "2015-05-24", "yt": 636.0 }, { "date": "2015-05-24", "fb": 16731.0 }, { "date": "2015-05-25", "yt": 636.0 }, { "date": "2015-05-25", "tw": 1269.0 }, { "date": "2015-05-25", "fb": 16752.0 }, { "date": "2015-05-26", "yt": 637.0 }, { "date": "2015-05-26", "fb": 16766.0 }, { "date": "2015-05-26", "tw": 127.0 }]
code
from collections import defaultdict res = defaultdict(list) v, k in values: res[k].append(v) print res
python version: 2.7
i use itertools.groupby
group dictionaries based on same date
, each date
create dictionary (that used append result list) ,lets call maindict
, , update maindict
dictionaries group. example -
from itertools import groupby operator import itemgetter nvalues = [] dt, k in groupby(sorted(values,key=itemgetter('date')),key=itemgetter('date')): maindict = {'date':dt} d in k: maindict.update(d) nvalues.append(maindict)
please note, use latest value each key
in resultant dictionary, if there multiple such keys in values
list same date
.
another thing note itertools.groupby
expects list sorted according key group, hence have following in - sorted(values,key=itemgetter('date'))
. if list sorted according date
, not needed.
demo -
>>> values = [{ ... "date": "2015-05-07", ... "yt": 630.0 ... }, ... { ... "date": "2015-05-07", ... "fb": 16555.0 ... }, ... { ... "date": "2015-05-07", ... "tw": 1234.0 ... }] >>> >>> itertools import groupby >>> operator import itemgetter >>> nvalues = [] >>> dt, k in groupby(sorted(values,key=itemgetter('date')),key=itemgetter('date')): ... maindict = {'date':dt} ... d in k: ... maindict.update(d) ... nvalues.append(maindict) ... >>> print(nvalues) [{'date': '2015-05-07', 'tw': 1234.0, 'fb': 16555.0, 'yt': 630.0}]
Comments
Post a Comment