我一直试图在列表中找到最大的结果 - 使用置信度值。
列表示例:
[[{u'categories': [u'health-beauty'], u'confidence': 0.3333333333333333},
{u'categories': [u'activities-events'], u'confidence': 0.6666666666666666}]]
将返回 activities-events 字典
[[{u'categories': [u'home-garden'], u'confidence': 0.3333333333333333},
{u'categories': [u'None of These'], u'confidence': 0.3333333333333333},
{u'categories': [u'toys-kids-baby'], u'confidence': 0.3333333333333333}]]
将返回全部三个,因为它们相等
[[{u'categories': [u'entertainment'], u'confidence': 1.0}]]
将返回娱乐
我尝试使用python的max函数:
seq = [x['confidence'] for x in d[0]]
max(seq)
但只返回值
答案 0 :(得分:2)
您可以在自己的示例中找到最大置信度,然后使用filter
创建所有最大记录的列表:
max_conf = max(x['confidence'] for x in d[0])
filter(lambda x: x['confidence']==max_conf, d[0])
如下面的评论中所述,filter
可以替换为列表理解:
max_records = [x for x in d[0] if x['confidence'] == max_conf]
答案 1 :(得分:0)
max(d[0], key=lambda x: x['confidence'])
返回d[0]
具有最高confidence
属性的整个元素。
另一种方式:
import operator as op
max(d[0], key=op.attrgetter('confidence'))
答案 2 :(得分:0)
sorted(d[0], key=lambda k: k['confidence'])[-1]
还有一种方法。同时返回d[0]
中具有最高confidence
属性的整个元素。
答案 3 :(得分:0)
如果您想以最高置信度检索所有匹配项,则max
不是选项。您首先需要按key = confidence对其进行排序(您可以使用sorted作为目的,operator.itemgetter来检索密钥)然后将元素分组(您可以使用itertools.groupby)对信心。最后以最高的置信度返回该组
from itertools import groupby
from operator import itemgetter
groups = groupby(sorted(inlist[0], key = itemgetter(u'confidence'), reverse = True),
key = itemgetter(u'confidence'))
[e[u'categories'] for e in next(groups)[-1]]
实施例
>>> inlist = [[{u'categories': [u'health-beauty'], u'confidence': 0.3333333333333333}, {u'categories': [u'activities-events'], u'confidence': 0.6666666666666666}]]
>>> groups = groupby(sorted(inlist[0], key = operator.itemgetter(u'confidence'), reverse = True),key = operator.itemgetter(u'confidence'))
>>> [e[u'categories'] for e in next(groups)[-1]]
[[u'activities-events']]
>>> inlist = [[{u'categories': [u'home-garden'], u'confidence': 0.3333333333333333}, {u'categories': [u'None of These'], u'confidence': 0.3333333333333333}, {u'categories': [u'toys-kids-baby'], u'confidence': 0.3333333333333333}]]
>>> groups = groupby(sorted(inlist[0], key = operator.itemgetter(u'confidence'), reverse = True),key = operator.itemgetter(u'confidence'))
>>> [e[u'categories'] for e in next(groups)[-1]]
[[u'home-garden'], [u'None of These'], [u'toys-kids-baby']]
>>> inlist = [[{u'categories': [u'entertainment'], u'confidence': 1.0}]]
>>> groups = groupby(sorted(inlist[0], key = operator.itemgetter(u'confidence'), reverse = True),key = operator.itemgetter(u'confidence'))
>>> [e[u'categories'] for e in next(groups)[-1]]
[[u'entertainment']]
>>>