簡體   English   中英

改進函數運行時間

[英]Improve function run-time

我創建了一個獲取數據結構並將其所有元組替換為列表的函數。

例如:

in_data = ({'name': 'Bob', 'age': 50, 'children': ('Alex', 'Justin', 'Daniel')},
           {'Name': 'Olive', 'Age': 42, 'Children': ('Rose', 'Vera', 'Karen')})

out_data = [{'name': 'Bob', 'age': 50, 'children': ['Alex', 'Justin', 'Daniel']}, 
            {'Name': 'Olive', 'Age': 42, 'Children': ['Rose', 'Vera', 'Karen']}]

這是功能:

def t2l(data):
    if type(data) in [tuple]:
        data = list(data)
    for inx, item in enumerate(data):  
        if type(data) in [dict]:
            inx, item = item, data[item]
        if type(item) in [tuple]:
            data[inx] = list(item)
            item = data[inx]
        if type(item) in (list, dict, tuple):
            data[inx] = t2l(item)
    return data

這個函數將在 RDD 的數百萬行上運行,所以我想盡可能地改進它。

有沒有辦法像開箱即用的功能一樣改善運行時間,我可以用它來使它更好?

謝謝

不知道它是否更快或會篡改您擁有的其他數據,但您可以轉儲到 json 並重新加載它

import json


print(json.loads(json.dumps(in_data)))

這應該更快,但我不確定您是否想檢查除tuple以外的任何其他內容:

def t2l(data):
    for item in data:
        for key in item:
            if type(item[key]) is tuple:
                item[key] = [*item[key]]
    data = [*data]
    return data

表現:

%%timeit
t2l(in_data*1000000)

735 ms ± 12.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%%timeit
json.loads(json.dumps(in_data*1000000))

4.43 s ± 37.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

暫無
暫無

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

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