Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 改进函数运行时_Python_Python 3.x_Performance_Runtime - Fatal编程技术网

Python 改进函数运行时

Python 改进函数运行时,python,python-3.x,performance,runtime,Python,Python 3.x,Performance,Runtime,我创建了一个函数,用于获取数据结构并将其所有元组替换为列表 例如: 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': ['A

我创建了一个函数,用于获取数据结构并将其所有元组替换为列表

例如:

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)

您需要这样做的具体原因是什么?您可以将它转储到json并重新加载它的IDE注意:我可以问一下为什么需要执行这样的转换吗?不可能直接以列表的形式接收数据,也不可能直接以元组的形式使用数据吗?在PySpark中将带有元组的RDD转换为Dataframe时,我得到的是一个java指针,而不是数组。一旦把它转换成一个列表,我就得到了正确的数据。