我有一个包含日期嵌入文件名的bazillion文件。我将文件解析为dict,其中键是从名称中提取的日期时间,值是路径。
我想从日期时间在时间A和时间B之间的集合中选择所有文件。
我的第一个想法是将dict转换为元组列表然后排序。
file_list = [(k, v) for k, v in file_dict.items()]
file_list = sorted(file_list, key = lambda x: x[0])
然后我将使用for循环从两个点之间的列表中选择。
first = -1
last = -1
for i in range(len(file_list)):
if first < 0 and file_list[i] > time_a:
first = i
if last < 0 and file_list[i] > time_b:
last = i
if first > -1 and last > -1:
new_dict = {k: v for k, v in file_list[first:last]}
else:
whatever()
严格来说,这已经够好了,但它看起来并不优雅。有没有更好的方法来选择这些日期?
答案 0 :(得分:1)
执行一个行列表解析时,可以过滤表达式中的输出,如下面的代码所示。如果A和B之间没有日期,那么您将得到一个空字典,因为所有项都不匹配if条件。
{k:v for k, v in file_list if k >= time_a and k <= time_b}