gpt4 book ai didi

python - 优化海量python字典解析,多线程

转载 作者:行者123 更新时间:2023-12-03 13:15:58 25 4
gpt4 key购买 nike

让我们举一个小例子 python 字典,其中的值是整数列表。

example_dict1 = {'key1':[367, 30, 847, 482, 887, 654, 347, 504, 413, 821],
'key2':[754, 915, 622, 149, 279, 192, 312, 203, 742, 846],
'key3':[586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}

假设我需要解析列表的值,我已将其实现到以下函数中:
def manipulate_values(input_list):
return_values = []
for i in input_list:
new_value = i ** 2 - 13
return_values.append(new_value)
return return_values

现在,我可以轻松地解析该字典的值,如下所示:
for key, value in example_dict1.items():
example_dict1[key] = manipulate_values(value)

结果如下:
example_dict1 = {'key1': [134676, 887, 717396, 232311, 786756, 427703, 120396, 254003, 170556, 674028], 
'key2': [568503, 837212, 386871, 22188, 77828, 36851, 97331, 41196, 550551, 715703],
'key3': [343383, 271428, 220887, 226563, 480236, 181463, 556503, 537276, 278771, 319212]}

这对于小型词典非常有效。

我的问题是,我有一个包含数百万个键和长列表的庞大字典。如果我应用上述方法,算法将会非常缓慢。

我该如何优化上述内容?

(1) 多线程——除了传统的 threading 之外,字典中还有更有效的选项可用于多线程这个 for 语句吗?模块?

(2) 更好的数据结构是否合适?

我在问这个问题,因为在这种情况下,我很困惑如何最好地进行。我没有看到比字典更好的数据结构,但是跨字典(然后跨值列表)的 for 循环非常慢。这里可能有一些设计得更快的东西。

编辑:你可以想象,这有点像一个玩具例子——有问题的函数比 x**2-13 复杂一点。

我对如何使用具有数百万个键的字典以及长长的值列表更感兴趣。

最佳答案

如果您可以将所有内容存储在 numpy 数组中,则处理速度会更快。我将每个列表的大小增加了 50 万倍以测试可伸缩性,这些是我的结果:

from timeit import timeit
import numpy as np

n = 500000
example_dict1 = {'key1':[367, 30, 847, 482, 887, 654, 347, 504, 413, 821]*n,
'key2':[754, 915, 622, 149, 279, 192, 312, 203, 742, 846]*n,
'key3':[586, 521, 470, 476, 693, 426, 746, 733, 528, 565]*n}

def manipulate_values(input_list):
return_values = []
for i in input_list:
new_value = i ** 2 - 13
return_values.append(new_value)
return return_values

用你的方法:
for_with_dictionary = timeit("""
for key, value in example_dict1.items():
example_dict1[key] = manipulate_values(value)
""", "from __main__ import example_dict1,manipulate_values ",number=5)

print(for_with_dictionary)

>>> 33.2095841

使用 numpy:
numpy_broadcasting = timeit("""
array = np.array(list(example_dict1.values()))
array = array ** 2 - 13
""", "from __main__ import example_dict1, np",number=5)
print(numpy_broadcasting)

>>> 5.039885

速度有显着提升,至少提升6倍。

关于python - 优化海量python字典解析,多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60593456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com