根据值在词典列表中查找类似的项目

Hel*_*otz 5 python dictionary filtering list similarity

我想根据存储在字典列表中的标签来匹配django数据库中的类似文章,如下所示:

myarticle = {'pk': 17, 'tags': [0, 1, 0, 1, 0]}
allarticles = [{'pk': 1, 'tags': [0, 0, 0, 1, 0]}, 
               {'pk': 2, 'tags': [0, 1, 0, 1, 0]},
               {'pk': 3, 'tags': [1, 1, 0, 0, 0]},
               {'pk': 4, 'tags': [1, 0, 1, 0, 1]},
               {'pk': 5, 'tags': [0, 0, 0, 0, 1]}]
Run Code Online (Sandbox Code Playgroud)

获取列表的最方便的方法是根据输入myarticle对匹配标记的数量进行排名.预期结果:

result = [2, 1, 3, 5, 4]
Run Code Online (Sandbox Code Playgroud)

Aja*_*234 6

你可以使用sorted:

myarticle = {'pk': 17, 'tags': [0, 1, 0, 1, 0]}
allarticles = [{'pk': 1, 'tags': [0, 0, 0, 1, 0]}, 
           {'pk': 2, 'tags': [0, 1, 0, 1, 0]},
           {'pk': 3, 'tags': [1, 1, 0, 0, 0]},
           {'pk': 4, 'tags': [1, 0, 1, 0, 1]},
           {'pk': 5, 'tags': [0, 0, 0, 0, 1]}]
new_articles = sorted(allarticles, key=lambda x:sum(a == b for a, b in zip(myarticle['tags'], x['tags'])), reverse=True)
final_results = [i['pk'] for i in new_articles]
Run Code Online (Sandbox Code Playgroud)

输出:

[2, 1, 3, 5, 4]
Run Code Online (Sandbox Code Playgroud)