Fuzzywuzzy字典列表

问题描述

我有一个词典列表(API响应),我使用以下函数搜索某些民族

def nation_search(self):
    result = next((item for item in nations_v2 if (item["nation"]).lower() == (f"{self}").lower()),False)
    if result:
        return result
    else:
        return next((item for item in nations_v2 if (item["leader"]).lower() == (f"{self}").lower()),False)

2个示例:

nations_v2 = [{'nation_id': 5270,'nation': 'Indo-Froschtia','leader': 'Saxplayer','continent': 2,'war_policy': 4,'domestic_policy': 2,'color': 15,'alliance_id': 790,'alliance': 'Rose','alliance_position': 3,'cities': 28,'offensive_wars': 0,'defensive_wars': 0,'score': 4945,'v_mode': False,'v_mode_turns': 0,'beige_turns': 0,'last_active': '2020-08-10 04:04:48','founded': '2014-08-05 00:09:31','soldiers': 0,'tanks': 0,'aircraft': 2100,'ships': 0,'missiles': 0,'nukes': 0},{'nation_id': 582,'nation': 'Nightsilver Woods','leader': 'Luna','continent': 4,'color': 10,'alliance_id': 615,'alliance': 'Seven Kingdoms','alliance_position': 2,'cities': 23,'score': 3971.25,'last_active': '2020-08-10 00:22:16','founded': '2014-08-05 00:09:35','aircraft': 1725,'ships': 115,'nukes': 0}]

我想添加一个使用fuzzywuzzy进行的模糊搜索,以获取5个可能的匹配,以防传递到函数中的自变量出现拼写错误,但我似乎无法弄清楚。

我只想搜索 nation leader 的值。

解决方法

如果需要5个匹配项,请使用process

from fuzzywuzzy import process

def nation_search(self):
    nations_only = [ v2['nation'].lower() for v2 in nations_v2 ]
    leaders_only = [ v2['leader'].lower() for v2 in nations_v2 ]

    matched_nations = process.extract((f"{self}").lower(),nations_only,limit=5)
    matched_leaders = process.extract((f"{self}").lower(),leaders_only,limit=5)

    return matched_nations,matched_leaders