2017-02-14 44 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'} 

我想基於與時間值的差異分配T_ID此dummy_w五個字典中的每一個(dummy_R001到_R005)時間。

我想指定具有最小絕對值(時間差)的那個。

在這種情況下,分配給dummy_w [T_id]的id應該是'y'。

任何建議將不勝感激。謝謝。

+0

隨着'dummy_R001'等作爲變量代替列表中的元素,我甚至不想嘗試這個... –

回答

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

我會用key關鍵字參數爲min功能:

>>> result = min(list_of_all_dicts, key=lambda d: abs(d['Time'] - dummy_w['Time'])) 
>>> result['t_id'] 
'y'