Python在同一日期组dict值
我的问题是,如何轻松地将一些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
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()