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

Python處理列表套字典結(jié)構(gòu)JSON數(shù)據(jù)的三種方式對比

 更新時間:2026年02月28日 09:31:40   作者:大游小游之老游  
這篇文章主要為大家詳細(xì)介紹了Python處理JSON文件中列表套字典結(jié)構(gòu)的三種優(yōu)化方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

前言

對于 “列表套字典”(JSON 數(shù)組包含對象)類型的 JSON 文件,查找并修改特定鍵值的思路是:先遍歷列表中的每個字典,找到符合條件的目標(biāo)字典,再修改該字典中指定鍵的值,最后寫回文件。

示例場景

假設(shè) users.json 文件內(nèi)容如下(列表套字典結(jié)構(gòu)):

[
  {"id": 1, "name": "Alice", "age": 25, "active": true},
  {"id": 2, "name": "Bob", "age": 30, "active": false},
  {"id": 3, "name": "Charlie", "age": 28, "active": true}
]

需求

找到 id=2 的字典,將其 age 修改為 31,同時將 active 改為 true。

import json

# 1. 讀取 JSON 文件(列表套字典結(jié)構(gòu),解析后是 Python 列表)
with open("users.json", "r", encoding="utf-8") as f:
    data_list = json.load(f)  # data_list 是一個包含字典的列表

# 2. 遍歷列表,查找目標(biāo)字典并修改值
for item in data_list:
    # 假設(shè)通過 "id" 定位目標(biāo)字典(可根據(jù)實際條件調(diào)整)
    if item.get("id") == 2:  # 找到 id=2 的字典
        item["age"] = 31  # 修改 age 的值
        item["active"] = True  # 修改 active 的值
        break  # 找到后退出循環(huán),提高效率

# 3. 將修改后的列表寫回 JSON 文件
with open("users.json", "w", encoding="utf-8") as f:
    json.dump(data_list, f, indent=2, ensure_ascii=False)

潛在問題及優(yōu)化方案

在處理 “列表套字典” 結(jié)構(gòu)的 JSON 數(shù)據(jù)時,遍歷列表是最直接的方式,但對于數(shù)據(jù)量極大的場景(如幾萬 / 幾十萬條數(shù)據(jù)),遍歷的效率確實可能偏低。此時可以通過優(yōu)化查找邏輯借助第三方庫提升效率,具體方法如下:

方法 1:用 “字典映射” 預(yù)處理,將列表轉(zhuǎn)為索引字典(推薦)

 如果列表中的字典有唯一標(biāo)識鍵(如id),可以先將列表轉(zhuǎn)換為以該標(biāo)識為鍵的字典(相當(dāng)于建立 “索引”),后續(xù)查找時直接通過鍵獲取目標(biāo)字典,時間復(fù)雜度從遍歷的O(n)降至O(1)。

示例(基于之前的users.json):

import json

# 1. 讀取數(shù)據(jù)并構(gòu)建索引字典(以id為鍵)
with open("users.json", "r", encoding="utf-8") as f:
    data_list = json.load(f)

# 構(gòu)建映射:{id: 對應(yīng)的字典}
id_to_item = {item["id"]: item for item in data_list}

# 2. 直接通過id查找并修改(無需遍歷)
target_id = 2
if target_id in id_to_item:
    id_to_item[target_id]["age"] = 31
    id_to_item[target_id]["active"] = True

# 3. 寫回文件(原列表已被修改,因為字典是引用類型)
with open("users.json", "w", encoding="utf-8") as f:
    json.dump(data_list, f, indent=2, ensure_ascii=False)

優(yōu)勢

  • 預(yù)處理一次后,后續(xù)多次查找 / 修改均為O(1),適合頻繁操作的場景。
  • 不改變原列表結(jié)構(gòu),寫回文件時直接用原列表即可(因為字典是引用類型,修改映射中的字典會同步影響原列表)。

方法 2:用列表推導(dǎo)式 / 生成器表達(dá)式簡化查找(適合單次查找)

如果只需單次查找,可通過列表推導(dǎo)式或生成器表達(dá)式快速定位目標(biāo),代碼更簡潔(本質(zhì)仍是遍歷,但寫法更高效)。

示例:

import json

with open("users.json", "r", encoding="utf-8") as f:
    data_list = json.load(f)

# 用生成器表達(dá)式查找第一個符合條件的字典(找到即停止)
target = next((item for item in data_list if item["id"] == 2), None)
if target:
    target["age"] = 31
    target["active"] = True

with open("users.json", "w", encoding="utf-8") as f:
    json.dump(data_list, f, indent=2, ensure_ascii=False)

優(yōu)勢

  • 借助next()和生成器表達(dá)式,找到目標(biāo)后會立即停止遍歷(類似帶break的循環(huán)),避免多余操作。
  • 代碼更簡潔,適合一次性查詢修改。

方法 3:借助第三方庫(如pandas)處理結(jié)構(gòu)化數(shù)據(jù)

如果 JSON 數(shù)據(jù)是結(jié)構(gòu)化的(如每個字典的鍵相同,類似表格),可以用pandas將其轉(zhuǎn)為 DataFrame,通過類似 SQL 的查詢語法快速定位和修改,適合大數(shù)據(jù)量場景。

示例:

import json
import pandas as pd

# 1. 讀取JSON并轉(zhuǎn)為DataFrame
with open("users.json", "r", encoding="utf-8") as f:
    data_list = json.load(f)
df = pd.DataFrame(data_list)

# 2. 定位并修改(通過條件篩選)
df.loc[df["id"] == 2, ["age", "active"]] = [31, True]

# 3. 轉(zhuǎn)回列表并寫回文件
updated_list = df.to_dict("records")  # 轉(zhuǎn)為列表套字典
with open("users.json", "w", encoding="utf-8") as f:
    json.dump(updated_list, f, indent=2, ensure_ascii=False)

優(yōu)勢

  • pandas底層用 C 實現(xiàn),處理大數(shù)據(jù)量(如 10 萬 + 條)時效率遠(yuǎn)高于純 Python 遍歷。
  • 支持復(fù)雜條件查詢(如多鍵組合篩選),語法更直觀。

注意:需要安裝pandaspip install pandas),適合數(shù)據(jù)結(jié)構(gòu)化程度高的場景。

總結(jié):如何選擇

  • 小數(shù)據(jù)量(幾百條以內(nèi)):直接遍歷或生成器表達(dá)式即可,代碼簡單,效率差異可忽略。
  • 大數(shù)據(jù)量 + 有唯一標(biāo)識:優(yōu)先用 “字典映射” 預(yù)處理,單次預(yù)處理O(n),后續(xù)操作O(1),性價比最高。
  • 大數(shù)據(jù)量 + 結(jié)構(gòu)化數(shù)據(jù):用pandas,適合需要頻繁進(jìn)行復(fù)雜查詢和修改的場景。

本質(zhì)上,除了建立索引(方法 1)和借助底層優(yōu)化的庫(方法 3),其他方式仍依賴遍歷,但通過 “提前終止”(如break、next())可減少無效操作,效率差異主要體現(xiàn)在數(shù)據(jù)量極大的場景中。

到此這篇關(guān)于Python處理列表套字典結(jié)構(gòu)JSON數(shù)據(jù)的三種方式對比的文章就介紹到這了,更多相關(guān)Python處理JSON數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法

    Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法

    這篇文章主要介紹了Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法,Django是最具人氣的Python開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • python?opencv背景減去法摳圖實現(xiàn)示例

    python?opencv背景減去法摳圖實現(xiàn)示例

    這篇文章主要為大家介紹了python?opencv背景減去法摳圖實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python classmethod裝飾器原理及用法解析

    Python classmethod裝飾器原理及用法解析

    這篇文章主要介紹了Python classmethod裝飾器原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 使用python獲取郵箱郵件的設(shè)置方法

    使用python獲取郵箱郵件的設(shè)置方法

    這篇文章主要介紹了使用python獲取郵箱郵件的設(shè)置方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python之爬蟲的頭部偽裝詳解

    Python之爬蟲的頭部偽裝詳解

    這篇文章主要介紹了Python之爬蟲的頭部偽裝方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • python實現(xiàn)刪除文件與目錄的方法

    python實現(xiàn)刪除文件與目錄的方法

    這篇文章主要介紹了python實現(xiàn)刪除文件與目錄的方法,詳細(xì)的分析了涉及Python文件操作的各種方法,需要的朋友可以參考下
    2014-11-11
  • python3.7中安裝paddleocr及paddlepaddle包的多種方法

    python3.7中安裝paddleocr及paddlepaddle包的多種方法

    這篇文章主要介紹了python3.7中安裝paddleocr及paddlepaddle包,本文通過多種方法給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Python實現(xiàn)仿射密碼的思路詳解

    Python實現(xiàn)仿射密碼的思路詳解

    這篇文章主要介紹了Python實現(xiàn)仿射密碼的思路詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • python常用模塊(math itertools functools sys shutil)使用講解

    python常用模塊(math itertools functools sys 

    這篇文章主要介紹了python常用模塊之math itertools functools sys shutil的使用示例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python numpy有哪些常用數(shù)據(jù)類型

    Python numpy有哪些常用數(shù)據(jù)類型

    Numpy提供了兩種基本的對象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray是存儲單一數(shù)據(jù)類型的多維數(shù)組,而ufunc則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)
    2023-02-02

最新評論

万源市| 将乐县| 房产| 凌源市| 景泰县| 全南县| 庆元县| 库车县| 遵义县| 扶余县| 临泽县| 神池县| 乐山市| 嵊泗县| 普定县| 灵丘县| 桦南县| 图们市| 宣化县| 呈贡县| 香河县| 剑河县| 凌海市| 渝中区| 昌邑市| 海兴县| 扬中市| 吉木萨尔县| 房产| 贵德县| 招远市| 全州县| 乐山市| 牙克石市| 禹州市| 固镇县| 昂仁县| 常德市| 芜湖县| 都安| 页游|