改进函数 运行 次

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 的数百万行,所以我想尽可能地改进它。

有没有一种方法可以改进 运行-time 就像开箱即用的功能一样,我可以使用它来使它变得更好?

谢谢

不知道它是否更快或会篡改您拥有的其他数据,但您可以转储到 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)