【问题标题】:count objects created in django application in past X days, for each day计算过去 X 天内在 django 应用程序中创建的对象,每天
【发布时间】:2014-10-21 14:09:28
【问题描述】:

我有以下未排序的字典(日期是键):

{“23-09-2014”:0,“11-10-2014”:0,“30-09-2014”:0,“26-09-2014”:0, “03-10-2014”:0,“19-10-2014”:0,“15-10-2014”:0,“22-09-2014”:0, “17-10-2014”:0,“29-09-2014”:0,“13-10-2014”:0,“16-10-2014”:0, “12-10-2014”:0,“25-09-2014”:0,“14-10-2014”:0,“08-10-2014”:0, “2014 年 2 月 10 日”:0,“2014 年 9 月 10 日”:0,“2014 年 18 月 10 日”:0,“2014 年 9 月 24 日”:0, “28-09-2014”:0,“10-10-2014”:0,“21-10-2014”:0,“20-10-2014”:0, “2014 年 6 月 10 日”:0,“2014 年 4 月 10 日”:0,“2014 年 9 月 27 日”:0,“2014 年 5 月 10 日”:0, “01-10-2014”:0,“07-10-2014”:0}

我正在尝试从最旧到最新对其进行排序。 我试过代码:

mydict = OrderedDict(sorted(mydict .items(), key=lambda t: t[0], reverse=True))

对它进行排序,它几乎起作用了。它产生了排序的字典,但它忽略了几个月:

{“01-10-2014”:0,“02-10-2014”:0,“03-10-2014”:0,“04-10-2014”:0, “2014 年 5 月 10 日”:0,“2014 年 6 月 10 日”:0,“2014 年 7 月 10 日”:0,“2014 年 8 月 10 日”:0, “2014 年 9 月 10 日”:0,“2014 年 10 月 10 日”:0,“2014 年 11 月 10 日”:0,“2014 年 12 月 10 日”:0, “13-10-2014”:0,“14-10-2014”:0,“15-10-2014”:0,“16-10-2014”:0, “17-10-2014”:0,“18-10-2014”:0,“19-10-2014”:0,“20-10-2014”:0, “21-10-2014”:0,“22-09-2014”:0,“23-09-2014”:0,“24-09-2014”:0, “25-09-2014”:0,“26-09-2014”:0,“27-09-2014”:0,“28-09-2014”:0, “29-09-2014”:0,“30-09-2014”:0}

我该如何解决这个问题?

编辑: 我需要这个来计算过去 X 天内在 django 应用程序中创建的对象,每一天。

event_chart = {}
date_list = [datetime.datetime.today() - datetime.timedelta(days=x) for x in range(0, 30)]
for date in date_list:
    event_chart[formats.date_format(date, "SHORT_DATE_FORMAT")] = Event.objects.filter(project=project_name, created=date).count()

event_chart = OrderedDict(sorted(event_chart.items(), key=lambda t: t[0]))
return HttpResponse(json.dumps(event_chart))

【问题讨论】:

  • 您需要将这些字符串转换为 datetime 对象以使其正确排序 - 请查看 the docs。或者,如果您可以将格式更改为 'yyyy-mm-dd',它们将作为字符串正确排序。
  • 问题是,我已经从 datetime 对象转换了这些日期。他们每个人都应该本地化。请检查我的编辑

标签: python date python-2.7 types


【解决方案1】:

您可以使用datetime 模块将字符串解析为实际日期:

>>> from datetime import datetime
>>> sorted(mydict .items(), key=lambda t:datetime.strptime(t[0], '%d-%m-%Y'), reverse=True)

【讨论】:

  • 我正在使用 django,每个日期都应该本地化。请检查我的编辑
  • 好吧,甚至更好 - 你已经有 date 项目 - 甚至。为什么要销毁订单,然后再按该订单重新排序?
【解决方案2】:

如果您想创建格式为:{"22-09-2014": 0, 23-09-2014": 0, "localized date": count_for_that_date} 的 json 响应,以便最早的日期将出现在输出中的较早日期,那么您可以将 event_chart 设置为 OrderedDict

event_chart = OrderedDict()
today = DT.date.today() # use DT.datetime.combine(date, DT.time()) if needed
for day in range(29, -1, -1): # last 30 days
    date = today - DT.timedelta(days=day)
    localized_date = formats.date_format(date, "SHORT_DATE_FORMAT")
    day_count = Event.objects.filter(project=name, created=date).count()
    event_chart[localized_date] = day_count
return HttpResponse(json.dumps(event_chart))

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2016-03-06
    • 2021-06-08
    • 1970-01-01
    • 2019-02-17
    • 2017-04-02
    • 2019-12-17
    • 1970-01-01
    相关资源
    最近更新 更多