我正在使用和图像扫描API来查找特定图像,即猫或狗,此API告诉您图像中结果的可能性。例如,狗的图像将返回
{u' dog':0.99628395,你' 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,你' cat':0.87454434}
我正在寻找
的最终结果[U'狗']
(注意最终结果如何在[]而不是{})
注意:如果最终结果是{u' dog': 0.88628395 ,那么你就不会发现这样,那么我就不想回来了任何因为价值小于.89
答案 0 :(得分:2)
有两个步骤:
要获取具有字典最大值的密钥,您可以best = max(keywords, key=keywords.get)
。这将获得字典的最大值,因为它使用键来获取字典中每个项目的值。
然后你可以简单地检查它是否在你的范围内:return best if .89 < keywords[best] < 1 else []
。如果值不在.89和1
答案 1 :(得分:1)
<强>更新强>
为了提高效率(来自@Mad Physicist&#39;评论),您可以使用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
答案 2 :(得分: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()
应用于原始字典的值。答案 3 :(得分: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)。
答案 4 :(得分: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')