Python:找到字典的键[value]与其他值的区别,并返回具有最小差异的

时间:2017-02-14 08:22:51

标签: python loops dictionary key

我一直在努力研究如何获得与特定值具有最小差异的字典的密钥(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_R001到_R005)时间中每一个的时间值的差异为这个dummy_w分配T_id。

我想指定一个具有最小abs(时差)的那个。

在这种情况下,分配给dummy_w [T_id]的id应为' y'。

任何建议都将受到高度赞赏。感谢。

2 个答案:

答案 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等来自何处,但请注意,您可能最好从嵌套字典开始,而这些字典是键而不是变量名。

答案 1 :(得分:1)

我会将key关键字参数用于min函数:

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