Python 查找列表中最大的匹配项

Python 查找列表中最大的匹配项,python,list,max,min,dictionary,Python,List,Max,Min,Dictionary,我一直在尝试在列表中找到最大的结果-使用置信值 清单示例: [[{u'categories': [u'health-beauty'], u'confidence': 0.3333333333333333}, {u'categories': [u'activities-events'], u'confidence': 0.6666666666666666}]] 将返回活动事件字典 [[{u'categories': [u'home-garden'], u'confidence': 0.3333

我一直在尝试在列表中找到最大的结果-使用置信值

清单示例:

[[{u'categories': [u'health-beauty'], u'confidence': 0.3333333333333333},
 {u'categories': [u'activities-events'], u'confidence': 0.6666666666666666}]]
将返回活动事件字典

[[{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)
但这只是返回值

max(d[0], key=lambda x: x['confidence'])
返回
d[0]
中具有最高
置信度的整个元素

另一种方式:

import operator as op

max(d[0], key=op.attrgetter('confidence'))

还有一个办法。还返回
d[0]
中具有最高
置信度属性的整个元素。

您可以在自己的示例中找到最大置信度,然后使用
过滤器创建所有最大记录的列表:

max_conf = max(x['confidence'] for x in d[0])
filter(lambda x: x['confidence']==max_conf, d[0])
如下面的注释所述,
过滤器可以替换为列表理解:

max_records = [x for x in d[0] if x['confidence'] == max_conf]

如果要以最高置信度检索所有匹配项,
max
不是选项。首先需要按key=confidence对其进行排序(您可以用于此目的并检索密钥),然后根据可信度对元素进行分组(您可以使用)。最后以最高的信心返回团队

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']]
>>> 

使用什么规则的“最大结果”更新了问题。谢谢@Tichodroma将继续这样做。问题和您想要的应该是清楚的。我真的希望它能够返回0.3333示例中的所有三个。但这就行了。谢谢。你的意思可能是:
max_conf=max(对于d[0]中的x,['confidence']);result=[x for x in d[0]如果x['confidence']==max_conf]
No,我确实想使用filter函数,尽管我发现参数有误,所以我会更正它。当然,列表理解是另一种方法。它仍然不正确:
max(d[0],key=lambda x:x['confidence'])
返回整个字典,而不仅仅是
'confidence'
部分。
>>> 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']]
>>>