Python在同一日期组dict值

Python在同一日期组dict值,python,arrays,parsing,dictionary,Python,Arrays,Parsing,Dictionary,我的问题是,如何轻松地将一些dict键、值分组到同一个键上。根据键对不同的值进行分组,我将在代码中提供更好的解释 字典 这是我的字典的例子。我要做的是检查日期,如果字典中存在该日期,则收集同一日期的值。输出如下所示: values = [ { "date":"2015-05-07", "fb":16555.0, "tw":1234.0, "yt":630 } 整个dic: values=[ { "date": "20

我的问题是,如何轻松地将一些dict键、值分组到同一个键上。根据键对不同的值进行分组,我将在代码中提供更好的解释

字典 这是我的字典的例子。我要做的是检查日期,如果字典中存在该日期,则收集同一日期的值。输出如下所示:

   values = [
    {
    "date":"2015-05-07",
    "fb":16555.0,
    "tw":1234.0,
    "yt":630
    }
整个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
    }]
代码 Python版本:2.7

我将使用它根据相同的
date
对字典进行分组,为每个
date
创建一个字典(用于附加到结果列表),让我们调用这个
maindict
,然后使用组中的字典更新
maindict
。范例-

from itertools import groupby
from operator import itemgetter
nvalues = []
for dt, k in groupby(sorted(values,key=itemgetter('date')),key=itemgetter('date')):
    maindict = {'date':dt}
    for d in k:
        maindict.update(d)
    nvalues.append(maindict)
请注意,如果同一
日期的
列表中有多个这样的键,则这将使用结果字典中每个
键的最新值

另一件需要注意的事情是,希望列表按照要分组的键进行排序,因此我们在列表中有以下内容-
排序(value,key=itemgetter('date'))
。如果列表已根据
日期进行排序,则不需要这样做


演示-

>>> values = [{
...         "date": "2015-05-07",
...         "yt": 630.0
...     },
...     {
...         "date": "2015-05-07",
...         "fb": 16555.0
...     },
...     {
...         "date": "2015-05-07",
...         "tw": 1234.0
...     }]
>>>
>>> from itertools import groupby
>>> from operator import itemgetter
>>> nvalues = []
>>> for dt, k in groupby(sorted(values,key=itemgetter('date')),key=itemgetter('date')):
...     maindict = {'date':dt}
...     for d in k:
...             maindict.update(d)
...     nvalues.append(maindict)
...
>>> print(nvalues)
[{'date': '2015-05-07', 'tw': 1234.0, 'fb': 16555.0, 'yt': 630.0}]
我将根据相同的
date
对字典进行分组,为每个
date
创建一个字典(用于附加到结果列表),让我们调用此
maindict
,然后使用组中的字典更新
maindict
。范例-

from itertools import groupby
from operator import itemgetter
nvalues = []
for dt, k in groupby(sorted(values,key=itemgetter('date')),key=itemgetter('date')):
    maindict = {'date':dt}
    for d in k:
        maindict.update(d)
    nvalues.append(maindict)
请注意,如果同一
日期的
列表中有多个这样的键,则这将使用结果字典中每个
键的最新值

另一件需要注意的事情是,希望列表按照要分组的键进行排序,因此我们在列表中有以下内容-
排序(value,key=itemgetter('date'))
。如果列表已根据
日期进行排序,则不需要这样做


演示-

>>> values = [{
...         "date": "2015-05-07",
...         "yt": 630.0
...     },
...     {
...         "date": "2015-05-07",
...         "fb": 16555.0
...     },
...     {
...         "date": "2015-05-07",
...         "tw": 1234.0
...     }]
>>>
>>> from itertools import groupby
>>> from operator import itemgetter
>>> nvalues = []
>>> for dt, k in groupby(sorted(values,key=itemgetter('date')),key=itemgetter('date')):
...     maindict = {'date':dt}
...     for d in k:
...             maindict.update(d)
...     nvalues.append(maindict)
...
>>> print(nvalues)
[{'date': '2015-05-07', 'tw': 1234.0, 'fb': 16555.0, 'yt': 630.0}]

如果某个值重复出现,您想怎么办?我想放弃它。就像两个具有相同
日期
和相同
但值不同的词典一样。“放弃”是什么意思?实际上,这是不可能发生的,日期是唯一的。如果某个值重复,你想怎么办?我想放弃它。就像两本字典,日期相同,键相同,但值不同。“放弃”是什么意思?真的,这是不可能的,日期是唯一的。谢谢你的逻辑@Anand S KumarGlad我可以帮上忙。:-)谢谢你的逻辑@Anand S KumarGlad我可以帮上忙。:-)
d = {}
for x in values:
    if x["date"] in d:
        d[x["date"]].update(x)
    else: 
        d[x["date"]] = x

print d.values()