在列表中查找最大匹配

时间:2012-11-12 08:27:20

标签: python list max min dictionary

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

列表示例:

[[{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)

但只返回值

4 个答案:

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