python – 如何在字典中对日期字符串进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何在字典中对日期字符串进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2299字,纯文字阅读大概需要4分钟。
内容图文
如何在特定日期之后获得第一把钥匙?
当date_table变大时,最佳解决方案是什么?
def get_first():
date_table = {
'this is example 1': '01:20 2013-08-07',
'this is example 2': '11:45 2012-03-23',
'this is example 3': '19:00 2013-12-01',
}
certain_date = '12:14 2013-06-23'
# TODO: sort, filter
print get_first()
>> 'this is example 1'
解决方法:
您必须排序然后过滤,以及解析结构中的所有日期:
from datetime import datetime
certain_date = datetime.strptime(certain_date, '%H:%M %Y-%m-%d')
match = next((k for v, k in sorted((datetime.strptime(v, '%H:%M %Y-%m-%d'), k) for k, v in date_table.iteritems()) if v >= certain_date), None)
演示:
>>> certain_date = datetime.strptime(certain_date, '%H:%M %Y-%m-%d')
>>> next((k for v, k in sorted((datetime.strptime(v, '%H:%M %Y-%m-%d'), k) for k, v in date_table.iteritems()) if v >= certain_date), None)
'this is example 1'
另一种方法是过滤所有日期并且最接近搜索日期的日期:
from datetime import datetime, timedelta
parse = lambda d: datetime.strptime(d, '%H:%M %Y-%m-%d')
certain_date = parse(certain_date)
match = min(date_table, key=lambda k: parse(date_table[k]) - certain_date if parse(date_table[k]) > certain_date else timedelta.max)
演示:
>>> min(date_table, key=lambda k: parse(date_table[k]) - certain_date if parse(date_table[k]) > certain_date else timedelta.max)
'this is example 1'
您真的想重新考虑您的结构,并使用像堆队列或btree这样的东西来保持您的数据结构更易于访问这种访问.
即使是带有解析(日期时间,键)元组的排序列表也会表现得更好,因为bisect module会让您在O(log n)时间内找到“下一个”值,而不是O(n log n)用于排序或O( n)用于复杂的min()过滤器.
您可以使用以下命令快速将结构转换为这样的列表:
from functools import total_ordering
@total_ordering
class Entry(object):
def __init__(dt, key):
self.dt = dt
self.key = key
def __eq__(self, other):
if not isinstance(other, type(self)): return NotImplemented
return self.dt == other.dt and self.key == other.key
def __lt__(self, other):
if not isinstance(other, type(self)): return NotImplemented
if self.dt < other.dt:
return True
return self.dt == other.dt and self.key < other.key
date_list = [Entry(datetime.strptime(v, '%H:%M %Y-%m-%d'), k) for v, k in date_table.iteritems()]
date_list.sort()
然后找到你的下一场比赛:
import bisect
match = date_list[bisect.bisect(date_list, Entry(current_date, None))]
并使用bisect.insort()来保持列表排序.
内容总结
以上是互联网集市为您收集整理的python – 如何在字典中对日期字符串进行排序全部内容,希望文章能够帮你解决python – 如何在字典中对日期字符串进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。