【问题标题】:Filter dictionary based on date in python?根据python中的日期过滤字典?
【发布时间】:2021-04-21 20:49:17
【问题描述】:

我有一本像这样的字典,日期是字符串格式:-

{ "2021-04-21" : "Shoes",
  "2021-04-07" : "Clothes"
  "2021-03-19" : "Chocolates"
  "2021-03-12" : "Flowers",
  "2021-03-03" : "Gloves" }

我创建我的字典的方式是通过一个列表:-

my_order_dictionary = {s[:10]: s[10:] for s in output[1:]}

我正在尝试从现在获取 30 天前的日期值,所以我做到了:-

d = datetime.today() - timedelta(days=30)
for key,value in my_order_dictionary.items():
    if (key < d):
        print(value)

但我收到以下错误:-

    if (key < d):
TypeError: '<' not supported between instances of 'str' and 'datetime.datetime'

如何修复数据类型,然后根据日期进行过滤?

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以将d 格式化为字符串,以便与字典键进行比较。

    d = (datetime.today() - timedelta(days=30)).strftime('%Y-%m-%d')
    

    【讨论】:

      【解决方案2】:

      这是因为 key 是一个 str 值。

      根据您的字典初始化,每个键都是一个字符串。 因为你遍历字典的每个键,key 变量也是一个字符串。您不能将字符串与 DateTime 对象进行比较。

      您可以只使用datetime.strptime() 将字符串转换为日期时间对象。

      【讨论】:

        【解决方案3】:

        您必须将日期时间(以字符串形式给出)转换为 python 日期时间对象,以便与d 进行比较。您可以通过 datetime 的 strptime 方法来完成。 您必须更改 if 语句才能获得所需的行为。

        if (datetime.strptime(key, '%Y-%m-%d') < d):
        

        【讨论】:

          【解决方案4】:

          key 是一个字符串; ddatetime。您必须将字符串日期转换为datetime。你有一个一致的格式;我希望你能用你已经知道的来处理转换,是吗?

          例如:

          my_order_dictionary = {datetime.strptime(s[:10], "%y-%m-%d")): s[10:]
                                 for s in output[1:]}
          

          【讨论】:

          • "您必须将字符串日期转换为 datetime" - 为什么他们不能将日期时间转换为字符串日期?在我看来,这也会更有效率,因为它只需要一次转换。
          • 碰巧,字符串的整理顺序也可以用来比较日期。但是,内置的日期比较也相当快。我选择转换为日期时间,因为这将比字符串更“自然”地支持未来的使用。
          猜你喜欢
          • 2021-07-11
          • 1970-01-01
          • 1970-01-01
          • 2012-05-14
          • 2010-11-15
          • 1970-01-01
          • 2015-05-17
          • 2018-05-17
          • 2021-02-05
          相关资源
          最近更新 更多