1

例如:

{datetime.date(2000, 1, 15): [1],
 datetime.date(2000, 1, 14): [5],
 datetime.date(2000, 1, 3): [4],
 datetime.date(2005, 1, 10): [2],
 datetime.date(2005, 1, 16): [4],
 datetime.date(2005, 1, 5): [2]}

只是:

{(2000, 1): [10], (2005,1): [8]}

基本上省略了这一天,并添加了值。我似乎无法弄清楚如何删除datetime.date.

4

2 回答 2

3

“单行”r:

newdict = {
    (key.year, key.month): sum(
        v[0] for k, v in olddict.iteritems()
        if (key.year, key.month) == (k.year, k.month)
    )
    for key in olddict
}
>>> newdict
{(2000, 1): 10, (2005, 1): 8}

这可能比 0605002 的答案效率低一些。


或更传统的解决方案:

from collections import defaultdict

newdict = defaultdict(lambda: [0])
for key in olddict:
    newdict[(key.year, key.month)][0] += olddict[key][0]
于 2012-11-17T09:41:50.787 回答
0

简单的:

for key in olddict:
    if (key.year, key.month) in newdict:
        newdict[(key.year, key.month)][0] += olddict[key][0]
    else:
        newdict[(key.year, key.month)] = [olddict[key][0]]

从python 文档了解有关datetime对象的更多信息。

于 2012-11-17T09:35:50.050 回答