改进函数 运行 次
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)
我创建了一个获取数据结构并将其所有元组替换为列表的函数。
例如:
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)