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

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

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

前言

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

示例場(chǎng)景

假設(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,同時(shí)將 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 是一個(gè)包含字典的列表

# 2. 遍歷列表,查找目標(biāo)字典并修改值
for item in data_list:
    # 假設(shè)通過(guò) "id" 定位目標(biāo)字典(可根據(jù)實(shí)際條件調(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)

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

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

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

 如果列表中的字典有唯一標(biāo)識(shí)鍵(如id),可以先將列表轉(zhuǎn)換為以該標(biāo)識(shí)為鍵的字典(相當(dāng)于建立 “索引”),后續(xù)查找時(shí)直接通過(guò)鍵獲取目標(biāo)字典,時(shí)間復(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: 對(duì)應(yīng)的字典}
id_to_item = {item["id"]: item for item in data_list}

# 2. 直接通過(guò)id查找并修改(無(wú)需遍歷)
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. 寫回文件(原列表已被修改,因?yàn)樽值涫且妙愋停?
with open("users.json", "w", encoding="utf-8") as f:
    json.dump(data_list, f, indent=2, ensure_ascii=False)

優(yōu)勢(shì)

  • 預(yù)處理一次后,后續(xù)多次查找 / 修改均為O(1),適合頻繁操作的場(chǎng)景。
  • 不改變?cè)斜斫Y(jié)構(gòu),寫回文件時(shí)直接用原列表即可(因?yàn)樽值涫且妙愋停薷挠成渲械淖值鋾?huì)同步影響原列表)。

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

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

示例:

import json

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

# 用生成器表達(dá)式查找第一個(gè)符合條件的字典(找到即停止)
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)勢(shì)

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

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

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

示例:

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. 定位并修改(通過(guò)條件篩選)
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)勢(shì)

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

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

總結(jié):如何選擇

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

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

到此這篇關(guān)于Python處理列表套字典結(jié)構(gòu)JSON數(shù)據(jù)的三種方式對(duì)比的文章就介紹到這了,更多相關(guān)Python處理JSON數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(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背景減去法摳圖實(shí)現(xiàn)示例

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

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

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

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

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

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

    Python之爬蟲的頭部偽裝詳解

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

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

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

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

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

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

    這篇文章主要介紹了Python實(shí)現(xiàn)仿射密碼的思路詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    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提供了兩種基本的對(duì)象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray是存儲(chǔ)單一數(shù)據(jù)類型的多維數(shù)組,而ufunc則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)
    2023-02-02

最新評(píng)論

乌恰县| 屏东市| 泗阳县| 临泉县| 柳州市| 屏东县| 隆子县| 永州市| 电白县| 札达县| 萨嘎县| 安远县| 百色市| 中阳县| 西吉县| 阿鲁科尔沁旗| 襄垣县| 龙川县| 鹿邑县| 甘南县| 阳高县| 磐石市| 天等县| 苍溪县| 夏邑县| 志丹县| 池州市| 三原县| 定远县| 新邵县| 泾阳县| 万安县| 叶城县| 南投市| 舟曲县| 平泉县| 安国市| 香河县| 潢川县| 巨鹿县| 宿松县|