簡體   English   中英

查詢json數組的最有效方法?

[英]Most efficient way to query a json array?

我有一個 JSON 數組,每個對象都有一個代表類別的數字。 例如:

data: [
{
    "code": "336413"
},
{
    "code": "336413"
},
{
    "code": "331318"
},

挑選具有特定代碼編號的對象並刪除或留下其余對象的最有效方法是什么? 我的數據集有數千個對象,因此效率很重要。

嘗試使用生成器表達式來獲取您想要的值。

test_list= [
{
    "code": "333413"
},
{
    "code": "333413"
},
{
    "code": "331318"
}]

code = "333413"

a = (item for item in test_list if item["code"] == code)

print(list(a))

輸出:

>>[{'code': '333413'}, {'code': '333413'}]

使用列表理解將足夠有效,特別是考慮到您的數據集適合內存。

編輯:沒有看到@Errol 的回答,但幾乎是一樣的。

data = [
    {"code": "1"},
    {"code": "2"},
    {"code": "3"},
    {"code": "4"},
    {"code": "5"},
    {"code": "6"},
    {"code": "7"},
    {"code": "8"},
    {"code": "9"},
    {"code": "10"},
]


def main():
    codes_to_keep = {"1", "7", "10"}
    filtered_data = [document for document in data if document.get("code") in codes_to_keep]
    print(filtered_data)


if __name__ == '__main__':
    main()

它將輸出: [{'code': '1'}, {'code': '7'}, {'code': '10'}]

我用兩個Idea來做這個,Idea1是別人的idea,Idea2是我的idea。 我在我的電腦上運行這段代碼

編輯,我嘗試使用 10000。並更改我的測試代碼。謝謝 Vishal Singh 和 Cireo 指出我的錯誤和粗心

我創建了 10000 個 jsons。 下面是測試代碼:

import time
import copy
import random
def Idea1():
    codes_to_keep = []
    for i in range(5):
        codes_to_keep.append(str(random.randint(0,10000)))
    start = time.time()
    filtered_data = [document for document in data if document.get("code") in codes_to_keep]
    end = time.time()

    print("Idea1 running time: %f"%(end-start))
    print(filtered_data)

def Idea2():
    codes_to_keep = []
    for i in range(5):
        codes_to_keep.append(str(random.randint(0, 10000)))
    start = time.time()
    RemoveIndex = []
    for i in range(len(data2)):
        if not data2[i]["code"] in codes_to_keep:
            RemoveIndex.append(i)

    for i in reversed(RemoveIndex):
        del data2[i]

    end = time.time()
    print("Idea2 running time:%f"% (end - start))
    print(data2)

data = []
for i in range(10000):
    Tempdict = {}
    Tempdict["code"] = str(i)
    data.append(Tempdict)

data2 = copy.deepcopy(data)

# for i in range(1000000):
#     Tempdict = {}
#     Tempdict["code"] = str(i)
#     data2.append(Tempdict)

Idea1()

Idea2()

而且他們浪費的時間相距不遠。我推薦他們的想法。我的想法有點復雜,而且往往比他們慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM