Return 特定数字之间的最高键值对
Return highest key value pair in-between certain number
我正在使用图像扫描 API 来查找特定图像,即猫或狗,此 API 告诉您图像中结果的概率。例如,狗的图像会 return
{u'dog': 0.99628395, u'cat': 0.87454434}
我希望我的最终结果只取最高的 returned 值,并且仅当它高于 .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} 那么我不想 return 任何东西因为该值小于 .89
有两个步骤:
要获取具有字典最大值的键,您可以这样做best = max(keywords, key=keywords.get)
。这将获取字典的最大值,因为它使用键来获取字典中每个项目的值。
然后您可以简单地检查它是否在您的范围内:return best if .89 < keywords[best] < 1 else []
。如果值不在 .89 和 1
之间,这将 return 一个空数组
已更新
为了效率(来自@Mad Physicist 的评论),您可以取最大元素并检查它是否在预期范围内。
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
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()
应用于原始字典的值。
答案 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(更多"granular"):
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 大约是。快 25%(5.3us 对比 6.9us)。
您可以将项目转换为元组格式,然后使用 max ,元组始终按其第一项进行比较:
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')
我正在使用图像扫描 API 来查找特定图像,即猫或狗,此 API 告诉您图像中结果的概率。例如,狗的图像会 return
{u'dog': 0.99628395, u'cat': 0.87454434}
我希望我的最终结果只取最高的 returned 值,并且仅当它高于 .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} 那么我不想 return 任何东西因为该值小于 .89
有两个步骤:
要获取具有字典最大值的键,您可以这样做best = max(keywords, key=keywords.get)
。这将获取字典的最大值,因为它使用键来获取字典中每个项目的值。
然后您可以简单地检查它是否在您的范围内:return best if .89 < keywords[best] < 1 else []
。如果值不在 .89 和 1
已更新
为了效率(来自@Mad Physicist 的评论),您可以取最大元素并检查它是否在预期范围内。
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
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()
应用于原始字典的值。
答案 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(更多"granular"):
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 大约是。快 25%(5.3us 对比 6.9us)。
您可以将项目转换为元组格式,然后使用 max ,元组始终按其第一项进行比较:
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')