2017-02-14 1 views
1

特定の値との差が最小の辞書のキー(id)を取得する方法に苦労しています。
例えば、Python:辞書のキー[値]と他の値との差を見つけ、最小の差異を持つIDを返す

は、私は辞書のように、

dummy_w = {'Time': 1006120000,'T_id' : ''} 

し、次のように持って、

dummy_R001 = {'Filename':"home/abc/de.csv",'Time':1006090000,'t_id':'x'} 
dummy_R002 = {'Filename':"home/abc/df.csv",'Time':1006100000,'t_id':'y'} 
dummy_R003 = {'Filename':"home/abc/d.csv",'Time':1026030000,'t_id':'z'} 
dummy_R004 = {'Filename':"home/abc/ef.csv",'Time':1026080000,'t_id':'p'} 
dummy_R005 = {'Filename':"home/abc/f.csv",'Time':1026120000,'t_id':'q'} 

私は時間の値との差に基づいて、このdummy_wためT_idを割り当てます5つの辞書(dummy_R001〜_R005)のそれぞれの時間。

最小のabs(時間差)を割り当てたいと思っています。

この場合、dummy_w [T_id]に割り当てられたIDは 'y'でなければなりません。

ご意見をいただければ幸いです。ありがとう。

+0

、私も... –

答えて

1

'Time'のすべての値を繰り返し処理し、abs()の差を計算し、min()の差を取ることができます。その後dummy_w['T_id']に割り当てる:

min_diff = min((abs(dummy_w['Time']-d['Time']),d['t_id']) for d in [dummy_R001,dummy_R002,dummy_R003,dummy_R004,dummy_R005]) 
# (20000, 'y') 

dummy_w['T_id'] = min_diff[1] 
# {'T_id': 'y', 'Time': 1006120000} 

注意を、私はなどdummy_R001はどこから来たのかわからないんだけど、あなたはこれらのキーの代わりに、変数名いたところ、ネストされた辞書から始まるのよりよいだったかもしれないことを考えます。

+0

くそーこれを試行する必要はありません。この解決策はとてもPythonianな感じです。 – JGut

+0

@Chris_Randsうわー!あなたは天才です!これは、別の測定の出力(ファイルのレコード)と一致する必要のある特定のフォルダの下にあるファイルのメタデータレコードです。私は入れ子になった辞書をしよう!どうもありがとう!! – 007

1

私はmin関数にkeyキーワード引数を使用します。 `dummy_R001`などではなく、リスト要素の変数であることで

>>> result = min(list_of_all_dicts, key=lambda d: abs(d['Time'] - dummy_w['Time'])) 
>>> result['t_id'] 
'y' 
関連する問題