我的数据如下:
{
'test1462477941.log': { 'end_diff': 537,
'file_epoch': 1462477941,
'start_diff': -33},
'test1462478161.log': { 'end_diff': 317,
'file_epoch': 1462478161,
'start_diff': 284},
'test1462478346.log': { 'end_diff': 132,
'file_epoch': 1462478346,
'start_diff': 99},
}
我想要做的是找到最低的,积极的" start_diff"任何键中的值并打印相对顶级键(文件名)。数据结构让我有点失望。
如果使用上面的数据,它应该找到并打印出来:
test1462478346.log
有优雅的方法吗?如果没有,我会采取任何措施
答案 0 :(得分:1)
使用filter
删除非肯定的min
并key
进行搜索:
a = {
'test1462477941.log': {'end_diff': 537,
'file_epoch': 1462477941,
'start_diff': -33},
'test1462478161.log': {'end_diff': 317,
'file_epoch': 1462478161,
'start_diff': 284},
'test1462478346.log': {'end_diff': 132,
'file_epoch': 1462478346,
'start_diff': 99},
}
only_positive_start_diff = filter(lambda x: x[1]['start_diff'] > 0, a.items())
min_start_diff = min(only_positive_start_diff, key=lambda x: x[1]['start_diff'])
print min_start_diff[0] # Min log file
没有lambda
,它看起来像是:
def only_positive(x):
return x[1]['start_diff'] > 0
def min_start(x):
return x[1]['start_diff']
only_positive_start_diff = filter(only_positive, a.items())
min_start_diff = min(only_positive_start_diff, key=min_start)
print min_start_diff[0]
答案 1 :(得分:1)
这是一个使用内置函数reduce的解决方案:
import sys
filename, start_diff = reduce(
lambda curMin, item:
curMin if item[1]['start_diff']<0 or item[1]['start_diff']>curMin[1] else (item[0], item[1]['start_diff']),
inputDict.iteritems(),
('not_found.log', sys.maxint))
print filename
请注意,代码是用Python 2.7编写的。如果您使用Python 3.x,那么您应该在functools中找到reduce函数,并且dict.iteritems()已更改为dict.items()。