我在这里发帖是因为我无法找到问题的答案。
让我解释一下:我正在尝试进行多处理任务。 我有10个工人,每个人都返回一个字典,值是3个元素的列表,2个整数和1个列表:
例如:
worker 0返回{0 : [3,15, [[0,1,1], [1,1,0]] , 2 : [11,14, [[3,0,1], [1,4,2]]}
工人1返回{0 : [6,8, [[4,1,7], [5,8,8]] , 2 : [19,27, [[6,1,11], [4,4,2]]}
worker 2返回{0 : [13, 7, [[0,1,1], [1,1,0]], 2 : [7, 3, [[3,0,1], [5,3,1]]}
这些词典存储在不同的pickle文件中。
在这种情况下,我有2个不同的键,所以我想要2个词典(但数字是变量)。
他们看起来应该是这样的:
d1 = {0 : [X ,Y, [[0,1,1], [4,1,7],[0,1,1],[1,1,0],[5,8,8],[1,1,0] }
d1 = {2 : [X ,Y, [[0,1,1], [4,1,7],[0,1,1],[1,1,0],[5,8,8],[1,1,0] }
X是第一个元素的总和= 3 + 6 + 13 = 22
Y是第二个元素的总和= 15 + 8 + 7 = 30
请注意列表的列表元素是隔行扫描的,而不是连接的,我必须循环工作者并且每次都要占用一个元素。
我的代码就是这样开始的:
def mergeAnalysis(outPath, nbWorkers):
for i in range(nbWorkers):
with open(os.path.join(outPath, "ERROR_TEMP{}.p".format(i)), 'rb') as fichier:
dictlist.append(pickle.load(fichier))
dictlist是词典列表。
如果有人有这个想法吗? 非常感谢你的帮助
编辑:我试图提取字典的值:
for j in range(0,len(dictlist)):
for k1 in dictlist[j].keys():
a = dictlist[j].get(k1)
答案 0 :(得分:0)
假设您有一个工人返回的输出列表。假设订单可能很重要,因此此列表具有特定订单。基本上,假设你有这个:
worker_outputs = [
{0: [3, 15, [[0, 1, 1], [1, 1, 0]]], 2: [11, 14, [[3, 0, 1], [1, 4, 2]]]},
{0: [6, 8, [[4, 1, 7], [5, 8, 8]]], 2: [19, 27, [[6, 1, 11], [4, 4, 2]]]},
{0: [13, 7, [[0, 1, 1], [1, 1, 0]]], 2: [7, 3, [[3, 0, 1], [5, 3, 1]]]},
]
迭代工作输出的键将使解决这个问题变得容易得多。
import pprint
keys = set(k for output in worker_outputs for k in output)
results = {}
for key in keys:
outputs_with_key = [output[key] for output in worker_outputs if key in output]
results[key] = [
sum(l[0] for l in outputs_with_key),
sum(l[1] for l in outputs_with_key),
zip(*(l[2] for l in outputs_with_key)),
]
pprint.pprint(results)