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