如何从特定 SUBKEY 中找到最低正值的顶级 KEY?
How do I find the top level KEY of the lowest positive VALUE from a particular SUBKEY?
我的数据是这样的:
{
'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
有没有优雅的方法来做到这一点?如果没有,我什么都拿
使用 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]
这是一个使用内置函数的解决方案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
请注意代码是用Python2.7写的。如果你使用 Python 3.x,那么你应该在 functools, and dict.iteritems() has been changed to dict.items().
中找到 reduce 函数
我的数据是这样的:
{
'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
有没有优雅的方法来做到这一点?如果没有,我什么都拿
使用 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]
这是一个使用内置函数的解决方案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
请注意代码是用Python2.7写的。如果你使用 Python 3.x,那么你应该在 functools, and dict.iteritems() has been changed to dict.items().
中找到 reduce 函数