返回特定数字之间的最高键值对

问题描述 投票:-1回答:5

我正在使用和图像扫描API来查找特定的图像,即猫或狗这个API告诉你图像结果的可能性。例如,狗的图像将返回

{u'dog':0.99628395,u'cat':0.87454434}

我希望我的最终结果只取得最高的返回值,并且只有当它高于.89且低于1时。

我到目前为止的代码:

import operator

#define lists
tags = [u'dog', u'cat']
tags_value= [0.99628395, 0.87454434]

#merge key and value pairs
keywords = dict(zip(tags, tags_value))

#check the result
print (keywords)

这给了我

{u'dog':0.99628395,u'cat':0.87454434}

我正在寻找最终的结果

[u'dog']

(注意最终结果如何在[]而不是{})

注意:如果最终结果为{u'dog':0.88628395,u'cat':0.87454434},那么我不想返回任何内容,因为该值小于.89

python keyvaluepair
5个回答
2
投票

有两个步骤:

要获得具有字典最大值的密钥,您可以执行best = max(keywords, key=keywords.get)。这将获得字典的最大值,因为它使用键来获取字典中每个项的值。

然后你可以简单地检查它是否在你的范围内:return best if .89 < keywords[best] < 1 else []。如果值不在.89和1之间,则返回空数组


1
投票

更新

为了提高效率(来自@Mad Physicist的评论),您可以使用max元素并检查它是否在预期范围内。

data = {u'dog': 0.99628395, u'cat': 0.87454434}
probable_key = max(data, key = data.get)
result = None
if 0.89<data[probable_key] and data[probable_key]<1:
    result = probable_key
print(result) # dog

您还可以按字典值对字典进行排序,然后检查该值是否在预期范围内。

import operator
data = {u'dog': 0.99628395, u'cat': 0.87454434}

sorted_data = sorted(data.items(), key = operator.itemgetter(1), reverse=True)
result = None
if 0.89<sorted_data[0][1] and sorted_data[0][1]<1:
    result = sorted_data[0][0]
print(result) # dog

1
投票
max((k for k, v in keywords.items() if .89 < v < 1), default=None, key=keywords.get)
# 'dog'
  • 第一个参数过滤字典以查找满足条件的项目,即.89 < v < 1
  • 第二个参数是一个默认值,如果没有项符合条件,则返回该值。 {u'dog': 0.88628395, u'cat': 0.87454434} -> None
  • 最后一个参数是一个关键函数,它将max()应用于原始字典的值。

0
投票

您可以将项目转换为元组格式,然后使用max,tuple始终按其第一项进行比较:

sample={u'dog': 0.99628395, u'cat': 0.87454434}
print(max([(j,i) for i,j in sample.items() if j>0.89 and j<1]))

输出:

(0.99628395, 'dog')

0
投票

答案1(更多pythonic):

res = [ key for key, val in keywords.items() if ( (val == max(list(keywords.values()))) and (0.89 <= val) and (val <= 1) ) ]
print (res)

答案2(更“细化”):

keys = list(keywords.keys())
values = list(keywords.values())
print( keys, values )
max_value = max(values)
max_index = values.index(max_value)
max_key = keys[max_index]
res = []
if ( (0.89 <= max_value) and (max_value <= 1) ) :
    res.append(max_key)
print (res)

根据我的测试,选项1是ca.快25%(5.3us vs. 6.9us)。

© www.soinside.com 2019 - 2024. All rights reserved.