gpt4 book ai didi

python - 通过Python多重处理处理字典列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:20 24 4
gpt4 key购买 nike

我正在用 python 处理字典列表,如下所示:

def process_results(list_of_dicts):
first_result, second_result, count = [], [], 0
for dictionary in list_of_dicts:
first_result.append(dictionary)
if 'pi' in dictionary:
second_result.append(dictionary)
count += 1
print second_result, first_result

接下来,通过这个简单的SO example在 for 循环中使用多重处理,我正在尝试以下操作(完全错误的结果):

    from multiprocessing import Pool

def process_results(list_of_dicts):
first_result, second_result, count = [], [], 0
for dictionary in list_of_dicts:
first_result.append(dictionary)
if 'pi' in dictionary:
second_result.append(dictionary)
count += 1
return second_result, first_result

if __name__ == '__main__':
list_of_dictionaries = # a list of dictionaries
pool = Pool()
print pool.map(process_results, list_of_dictionaries)

为什么这是错误的?最好有一个说明性的例子。

最佳答案

您可能正在寻找的是这个

from multiprocessing import Pool

def process_results(single_dict):
first_result, second_result, count = [], [], 0
first_result.append(single_dict)
if 'pi' in single_dict:
second_result.append(single_dict)
count += 1
return first_result, second_result

if __name__ == '__main__':
lst_dict = [{'a':1, 'b':2, 'c':3},{'c':4, 'pi':3.14}, {'pi':'3.14', 'not pi':8.3143}, {'sin(pi)': 0, 'cos(pi)': 1}];
pool = Pool()
print pool.map(process_results, lst_dict)

pool.map 对可迭代的 lst_dict 中的每个元素执行 process_results。由于 lst_dict 是一个字典列表,这意味着将使用它作为参数为 lst_dict 中的每个字典调用 process_resultsprocess_results 将处理每个字典而不是整个列表。

该程序中的

process_results 进行了相应的更改:对于列表中的给定字典,它将字典附加到 first_result 列表,然后将字典附加到 >second_result 列出 'pi' 键是否存在。结果是一个包含两个子列表的列表 - 一个包含字典,另一个包含第一个子列表的副本,如果未找到 'pi',则包含一个空列表。

如果您需要在进程之间共享 first_resultsecond_result 列表,则可以修改所有这些。

为了更好地了解 pool.map() 的工作原理,请查看 documentation 中的第一个示例。 .

要检索两个列表的原始/目标形式的结果,您可以将数据收集到一个列表中,然后对其进行处理:

results = []
results = pool.map(process_results, lst_dict)

first_result = [i[0][0] for i in results]
second_result = [i[0][0] for i in results if i[1]]

results 是元组列表。元组表示每个字典的处理结果 - 第一个元素是整个字典,第二个元素是空列表,或者如果找到 'pi' 键则为整个字典。剩下的两行将该数据检索到 first_resultsecond_result 列表中。

关于python - 通过Python多重处理处理字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837823/

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