最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)json對值進(jìn)行模糊搜索的示例詳解

 更新時(shí)間:2023年01月29日 14:05:38   作者:奧怪的小棧  
我經(jīng)常使用json進(jìn)行存儲(chǔ)配置,于是常常遇到這樣的問題:如果想要對某個(gè)數(shù)組里的值進(jìn)行模糊搜索,同時(shí)輸出相關(guān)的其他數(shù)組相同位置的的值該如何實(shí)現(xiàn)呢?本文就來和大家詳細(xì)聊聊

我經(jīng)常使用json進(jìn)行存儲(chǔ)配置,于是常常遇到這樣的問題:如果想要對某個(gè)數(shù)組里的值進(jìn)行模糊搜索,同時(shí)輸出相關(guān)的其他數(shù)組相同位置的的值該如何實(shí)現(xiàn)呢?

思路

代入實(shí)際案例來思考一下我的解法

數(shù)據(jù)

{
    "name": [
        "電飯煲版廣式臘腸煲飯",
        "電飯煲燒雞",
        "電飯煲燜面"],
    "ingredients": [
        "臘腸、米",
        "雞肉、洋蔥、菌菇",
        "豬肉、面食"],
    "url": [
        "https://www.***.com/video/BV1NE411Q7Jj",
        "https://www.***.com/video/BV1T54y1U7Cu",
        "https://www.***.com/video/BV14b411q7rM"
        "https://www.***.com/video/BV1K441157rz"],
    "difficulty": [
        "簡單",
        "簡單",
        "簡單"],
    "tag": [
        "廣式",
        "好吃",
        "健康餐"],
    "practice": [
        "炒",
        "燒",
        "蒸"
        ""],
    "tool": [
        "電飯煲",
        "電飯煲",
        "電飯煲"
        ""]
}

這是一個(gè)菜譜json。

假如我現(xiàn)在被隔離在家了,手頭上只有零星的食材,我想根據(jù)手頭上的食材來看看我都能做出什么菜。

那么這該如何實(shí)現(xiàn)呢?

解法一

假如已知我手上的食物有牛肉、洋蔥。那么我可以這樣實(shí)現(xiàn)

  • 遍歷json,然后分別創(chuàng)建數(shù)組變量存儲(chǔ)name、ingredients、url、difficulty等json數(shù)組內(nèi)容
  • 遍歷ingredients數(shù)組,模糊匹配是否與我手頭上的食物一致
  • 如果一致,將數(shù)據(jù)加入新的數(shù)組中,同時(shí)把相同位置的name、url、difficulty等json數(shù)組內(nèi)容也分別加入新的數(shù)組中
  • 同時(shí)輸出各個(gè)數(shù)組的內(nèi)容
    顯而易見,這種解法太呆了,于是我想還有哪里可以優(yōu)化呢?

解法二

于是我又想到了另一種寫法

  • 只遍歷一次json并存儲(chǔ),然后再存儲(chǔ)一組需要模糊匹配的內(nèi)容數(shù)組(這個(gè)內(nèi)容數(shù)組可以是你想匹配的任何值所在的對應(yīng)數(shù)組,例如想模糊匹配菜名,就只需要存儲(chǔ)name數(shù)組,想模糊匹配食材,就只需要存儲(chǔ)ingredients數(shù)組)
  • 模糊匹配是否與我手頭上的食物一致并記錄下位置
  • 通過位置取其他相關(guān)的其他數(shù)組相同位置的的值

這個(gè)解法的關(guān)鍵在于,因?yàn)楦鱾€(gè)數(shù)組的長度相同,所以獲取一次位置即可同時(shí)知道其他對應(yīng)數(shù)值所在的對應(yīng)數(shù)組中的位置
說的有點(diǎn)繞,直接上代碼。

代碼實(shí)現(xiàn)

首先取菜譜數(shù)據(jù)

# 取菜譜json
def get_record():
    url = "./menu.json"
    if not os.path.isfile(url):
        return "菜譜獲取失敗"
    fo = open(url, "r", encoding='utf-8')
    ele_json = loads(fo.read())
    return ele_json

模糊搜索實(shí)現(xiàn)

# 模糊搜索
def fuzzyfinder(user_input, collection_key_list):
    suggestions = []
    pattern = '.*?'.join(user_input)  # Converts 'djm' to 'd.*?j.*?m'
    regex = compile(pattern)  # Compiles a regex.
    a = 0
    for item in collection_key_list:
        match = regex.search(item)  # Checks if the current item matches the regex.
        if match:
            suggestions.append(a)
        a = a + 1
    return suggestions

user_input 和 collection_key_list 分別表示 關(guān)鍵字 和 欲模糊匹配的數(shù)組suggestions數(shù)組 存儲(chǔ)了模糊匹配上了的數(shù)值的位置

最后根據(jù)實(shí)際情況進(jìn)行數(shù)據(jù)取出使用即可。

在本例子里,就是取出菜譜

def get_cook(key):
    # 進(jìn)一步解析資源json
    al_dict = get_record()
    collection_key = []  # 用來模糊匹配的key
    for b in al_dict['ingredients']:
        collection_key.append(b)
    fuzzyfinder_i_list = fuzzyfinder(key, collection_key)  # 模糊搜索資源
    fuzzyfinder_i_len = len(fuzzyfinder_i_list)
    if fuzzyfinder_i_len > 0:
        if collection_key[fuzzyfinder_i_list[0]].replace("、", "") == key.replace("、", ""):
            return "".join([al_dict['name'][fuzzyfinder_i_list[0]], "丨", al_dict['ingredients'][fuzzyfinder_i_list[0]],
                            "\nB站教程BV號(hào):", al_dict['url'][fuzzyfinder_i_list[0]], "\n難度:",
                            al_dict['difficulty'][fuzzyfinder_i_list[0]], "丨標(biāo)簽:", al_dict['tag'][fuzzyfinder_i_list[0]],
                            "\n方法:", al_dict['practice'][fuzzyfinder_i_list[0]], "丨工具:",
                            al_dict['tool'][fuzzyfinder_i_list[0]]])
        elif collection_key[fuzzyfinder_i_list[fuzzyfinder_i_len - 1]].replace("、", "") == key.replace("、", ""):
            return "".join([al_dict['name'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "丨",
                            al_dict['ingredients'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]],
                            "\nB站教程BV號(hào):", al_dict['url'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "\n難度:",
                            al_dict['difficulty'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "丨標(biāo)簽:",
                            al_dict['tag'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]],
                            "\n方法:", al_dict['practice'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]], "丨工具:",
                            al_dict['tool'][fuzzyfinder_i_list[fuzzyfinder_i_len - 1]]])
        else:
            re_text = "未找到精準(zhǔn)關(guān)鍵詞,模糊搜索到以下內(nèi)容:\n"
            for c in fuzzyfinder_i_list:
                re_text = "".join(
                    [re_text, al_dict['name'][c], "丨", al_dict['ingredients'][c], "\nB站教程BV號(hào):",
                     al_dict['url'][c], "\n難度:", al_dict['difficulty'][c],
                     "丨標(biāo)簽:", al_dict['tag'][c], "\n方法:", al_dict['practice'][c],
                     "丨工具:", al_dict['tool'][c], "\n"])

            return re_text
    else:
        content = "".join(["未找到" + key + "相關(guān)菜譜"])
        return content

這個(gè)寫法可以同時(shí)解決精準(zhǔn)匹配和模糊匹配問題,精準(zhǔn)匹配結(jié)果一般是數(shù)組第一個(gè)或最后一個(gè),所以只需要判斷一下首尾是否與關(guān)鍵字相同即可

結(jié)果

來看一下效果

精準(zhǔn)匹配

if __name__ == "__main__":
    print(get_cook("胡蘿卜、牛肉、洋蔥"))
>>>胡蘿卜燉牛肉丨胡蘿卜、牛肉、洋蔥
>>>B站教程BV號(hào):https://www.***.com/video/BV1UR4y1V7nV
>>>難度:困難丨標(biāo)簽:法式
>>>方法:燉丨工具:一口大鍋

模糊匹配

if __name__ == "__main__":
    print(get_cook("牛肉、洋蔥"))
>>>未找到精準(zhǔn)關(guān)鍵詞,模糊搜索到以下內(nèi)容:
>>>電飯煲羅宋湯丨牛肉、番茄、洋蔥、芹菜、胡蘿卜、土豆、卷心菜
>>>B站教程BV號(hào):https://www.***.com/video/BV16Q4y1m7nU
>>>難度:簡單丨標(biāo)簽:雜燴
>>>方法:丨工具:電飯煲
>>>胡蘿卜燉牛肉丨胡蘿卜、牛肉、洋蔥
>>>B站教程BV號(hào):https://www.***.com/video/BV1UR4y1V7nV
>>>難度:困難丨標(biāo)簽:法式
>>>...

問題解決

到此這篇關(guān)于Python實(shí)現(xiàn)json對值進(jìn)行模糊搜索的示例詳解的文章就介紹到這了,更多相關(guān)Python json值模糊搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python繪制散點(diǎn)圖的教程詳解

    Python繪制散點(diǎn)圖的教程詳解

    散點(diǎn)圖是指在回歸分析中,數(shù)據(jù)點(diǎn)在直角坐標(biāo)系平面上的分布圖,散點(diǎn)圖表示因變量隨自變量而變化的大致趨勢,據(jù)此可以選擇合適的函數(shù)對數(shù)據(jù)點(diǎn)進(jìn)行擬合。本文將用Python繪制散點(diǎn)圖,需要的可以參考一下
    2022-03-03
  • Python實(shí)現(xiàn)的服務(wù)器示例小結(jié)【單進(jìn)程、多進(jìn)程、多線程、非阻塞式】

    Python實(shí)現(xiàn)的服務(wù)器示例小結(jié)【單進(jìn)程、多進(jìn)程、多線程、非阻塞式】

    這篇文章主要介紹了Python實(shí)現(xiàn)的服務(wù)器,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)單進(jìn)程、多進(jìn)程、多線程、非阻塞式服務(wù)器的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • Python?dataframe如何設(shè)置index

    Python?dataframe如何設(shè)置index

    這篇文章主要介紹了Python?dataframe如何設(shè)置index,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實(shí)現(xiàn)在PDF中繪制形狀

    Python實(shí)現(xiàn)在PDF中繪制形狀

    在PDF中繪制圖形可以增強(qiáng)文檔的視覺效果,通過添加不同類型的形狀,如實(shí)線、虛線、矩形、圓形等,可以使文檔更加生動(dòng)有趣,本文將通過幾個(gè)示例介紹如何使用Python?在PDF中繪制不同的圖形,需要的可以了解下
    2024-11-11
  • python request post 列表的方法詳解

    python request post 列表的方法詳解

    這篇文章主要介紹了python request post 列表的方法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python實(shí)現(xiàn)列表轉(zhuǎn)Excel表格的第一列

    Python實(shí)現(xiàn)列表轉(zhuǎn)Excel表格的第一列

    這篇文章主要為大家詳細(xì)介紹了如何將Python中的列表轉(zhuǎn)換為Excel表格的第一列,并通過案例和代碼展示具體的操作步驟,希望可以幫助大家快速掌握這一技能
    2024-04-04
  • 怎樣使用Python腳本日志功能

    怎樣使用Python腳本日志功能

    Python通過logging模塊提供日志功能,關(guān)于logging模塊的使用網(wǎng)絡(luò)上已經(jīng)有很多詳細(xì)的資料,今天這里要分享的是怎樣在實(shí)際工程中使用日志功能。下面一起來學(xué)習(xí)學(xué)習(xí)。
    2016-08-08
  • Python如何將CSV文件轉(zhuǎn)JSON文件

    Python如何將CSV文件轉(zhuǎn)JSON文件

    這篇文章主要給大家介紹了關(guān)于Python如何將CSV文件轉(zhuǎn)JSON文件的相關(guān)資料,可以使用Python內(nèi)置的csv和json模塊來實(shí)現(xiàn)將csv文件轉(zhuǎn)為json的操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 一文詳解PyCharm中如何安裝第三方庫

    一文詳解PyCharm中如何安裝第三方庫

    在下載安裝好Pycharm后,一個(gè)在實(shí)際編程開發(fā)過程中非常重要的問題是第三方庫添加,這篇文章主要給大家介紹了關(guān)于PyCharm中如何安裝第三方庫的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Python漏洞驗(yàn)證程序Poc利用入門到實(shí)戰(zhàn)編寫

    Python漏洞驗(yàn)證程序Poc利用入門到實(shí)戰(zhàn)編寫

    這篇文章主要為大家介紹了Python?Poc利用入門到實(shí)戰(zhàn)編寫實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

    2022-02-02

最新評(píng)論

酒泉市| 双牌县| 礼泉县| 同德县| 河曲县| 巨鹿县| 青田县| 郓城县| 安龙县| 县级市| 漾濞| 韩城市| 桃江县| 高雄县| 雷山县| 治县。| 鹿邑县| 拜泉县| 得荣县| 漳平市| 察隅县| 长乐市| 布拖县| 和林格尔县| 饶阳县| 康马县| 吉水县| 天全县| 海门市| 屏山县| 武川县| 儋州市| 建瓯市| 弥渡县| 屏东县| 政和县| 卢氏县| 乾安县| 谷城县| 乌什县| 隆化县|