2017-02-10 4 views
0

ファイル名に日付が埋め込まれたbazillionファイルがあります。私は、キーが名前から抽出された日時であるdictにファイルを解析し、値はパスです。辞書のキーから2つのポイント間のすべての日時オブジェクトを選択します。

私は私の最初の考えは、ソート、その後タプルとのリストに辞書を変換することです

時間Aと時間Bの間で日時がセットからすべてのファイルを選択します。

file_list = [(k, v) for k, v in file_dict.items()] 
file_list = sorted(file_list, key = lambda x: x[0]) 

次に、forループを使用して2点間のリストから選択します。

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() 

厳密に言えば、これは十分ですが、それほどエレガントではありません。これらの日付を選択するより良い方法はありますか?

答えて

1

次のコードのように、1つのラインリストの理解を行う場合は、式の出力をフィルタリングできます。 AとBの間に日付がない場合、項目のいずれもif条件と一致しないため、空の辞書が取得されます。

{k:v for k, v in file_list if k >= time_a and k <= time_b} 
+0

通常、回答のコードを解説することをお勧めします。それがどのように働いているのか、まさにあなたがしていることを教えてくださいこれは、新しい開発者が何が起こっているかを正確に理解するのに役立ちます。 –

関連する問題