Skip to main content
 首页 » 编程设计

python之在字典中找到最相关的 child

2025年05月04日9zengkefu

拿这本字典:

{'local': {'count': 7, 
    'dining-and-nightlife': {'count': 1, 
        'bar-clubs': {'count': 1} 
    }, 
    'activities-events': {'count': 6, 
        'outdoor-adventures': {'count': 4}, 
        'life-skill-classes': {'count': 2} 
    } 
}} 

如何确定最相关的匹配项(在 30% 的余地内)?例如,activities-events 的计数为 6,因此 6/7 = 85%,其子 outdoor-adventures 的计数为 4 out 6 (66%)。因此,与此最相关的类别是户外探险。

在这个例子中:

{'local': {'count': 11, 
    'dining-and-nightlife': {'count': 4, 
        'bar-clubs': {'count': 4} 
    }, 
    'activities-events': {'count': 6, 
        'outdoor-adventures': {'count': 4}, 
        'life-skill-classes': {'count': 2} 
    } 
}} 

餐饮和夜生活 (33%) 与酒吧俱乐部 (100%) 和事件 (54%) 户外探险 (66%)。

我希望由

确定百分比截止值
cutoff = 0.3 

这里的想法是确定哪个类别最相关,移除较小的结果(低于 30%)匹配。

@F.J 在下面回答了这个问题,但现在我想更新树中的计数。

初始输出:

{'local': {'activities-events': {'count': 6, 
                             'life-skill-classes': {'count': 2}, 
                             'outdoor-adventures': {'count': 4}}, 
       'count': 11, 
       'dining-and-nightlife': {'bar-clubs': {'count': 4}, 'count': 4}}} 

后期输出:

{'local': {'activities-events': {'count': 6, 
                             'life-skill-classes': {'count': 2}, 
                             'outdoor-adventures': {'count': 4}}, 
       'count': 10, 
       'dining-and-nightlife': {'bar-clubs': {'count': 4}, 'count': 4}}} 

请您参考如下方法:

以下应该可以工作,请注意,这将修改您的输入字典:

def keep_most_relevant(d, cutoff=0.3): 
    for k, v in list(d.items()): 
        if k == 'count': 
            continue 
        if 'count' in d and v['count'] < d['count'] * cutoff: 
            del d[k] 
        else: 
            keep_most_relevant(v) 

例子:

>>> d1 = {'local': {'count': 7, 'dining-and-nightlife': {'count': 1, 'bar-clubs': {'count': 1}}, 'activities-events': {'count': 6, 'outdoor-adventures': {'count': 4}, 'life-skill-classes': {'count': 2}}}} 
>>> keep_most_relevant(d1) 
>>> pprint.pprint(d1) 
{'local': {'activities-events': {'count': 6, 
                                 'life-skill-classes': {'count': 2}, 
                                 'outdoor-adventures': {'count': 4}}, 
           'count': 7}} 
 
>>> d2 = {'local': {'count': 11, 'dining-and-nightlife': {'count': 4, 'bar-clubs': {'count': 4}}, 'activities-events': {'count': 6, 'outdoor-adventures': {'count': 4}, 'life-skill-classes': {'count': 2}}}} 
>>> keep_most_relevant(d2) 
>>> pprint.pprint(d2) 
{'local': {'activities-events': {'count': 6, 
                                 'life-skill-classes': {'count': 2}, 
                                 'outdoor-adventures': {'count': 4}}, 
           'count': 11, 
           'dining-and-nightlife': {'bar-clubs': {'count': 4}, 'count': 4}}}