优化大型python字典的解析,多线程

问题描述 投票:0回答:2

让我们看一个小的示例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模块之外,字典中是否还有更有效的选项可用于多线程语句?

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

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

编辑:您可以想象,这有点像玩具示例-所讨论的函数比x ** 2-13复杂。

我更感兴趣的是如何使用一本拥有数百万个键,一长串值的字典来值得。

python multithreading dictionary optimization bigdata
2个回答
3
投票

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


0
投票

如果您有足够的RAM:

© www.soinside.com 2019 - 2024. All rights reserved.