2017-08-22 4 views
0

Ich poste hier, weil ich die Antwort meines Problems nicht finden kann.Wörterbücher in einer bestimmten Reihenfolge zusammenfügen

Lassen Sie mich erklären: Ich versuche, Multi-Processing-Aufgaben zu erledigen. Ich habe 10 Arbeiter, jeder gibt ein Wörterbuch, sind die Werte Listen mit 3 Elementen, 2 ints und 1 Liste:

Zum Beispiel:

Arbeiter 0 liefert {0 : [3,15, [[0,1,1], [1,1,0]] , 2 : [11,14, [[3,0,1], [1,4,2]]}

Arbeiter 1 kehrt {0 : [6,8, [[4,1,7], [5,8,8]] , 2 : [19,27, [[6,1,11], [4,4,2]]}

Arbeiter 2 kehrt {0 : [13, 7, [[0,1,1], [1,1,0]], 2 : [7, 3, [[3,0,1], [5,3,1]]}


Diese d Wörterbücher werden in verschiedenen Pickle-Dateien gespeichert.

In diesem Fall habe ich zwei verschiedene Schlüssel, also möchte ich 2 Wörterbücher (aber die Zahl ist eine Variable).

sollten sie so aussehen:

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 ist die Summe der ersten Elemente = 3 + 6 + 13 = 22

Y die Summe der zweite ist, elements = 15 + 8 + 7 = 30

Beachten Sie, dass die Listenelemente der Liste interlaced sind, nicht verketten, Ich muss auf die Arbeiter einwirken und jedes Mal ein Element nehmen.

meinen Code beginnt wie folgt aus:

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 die Liste der Wörterbücher ist.

Wenn jemand eine Idee hat, das zu tun? Vielen Dank für Ihre Hilfe

edit: ich die Werte der Wörterbücher zu extrahieren versucht:

for j in range(0,len(dictlist)): 
    for k1 in dictlist[j].keys(): 
     a = dictlist[j].get(k1) 
+1

Was ist Ihre Frage? Niemand möchte Ihren Code für Sie debuggen. – jdv

+0

Meine Frage ist, wie man das richtig macht, Mein Code muss nicht debuggt werden, da es nur ein Anfang ist, meine Pickle-Dateien geladen und eine Liste von Dictionnaries erstellt wird. – PythonItsLife

+1

Der von Ihnen angegebene Code ist nicht wirklich relevant. Was haben Sie unternommen, um Ihr Problem der Zusammenführung der Wörterbücher nach Ihren Anforderungen zu lösen? Es gibt wahrscheinlich Tausende von ähnlichen Fragen. Was haben Sie in Ihrer Recherche gefunden? Bitte sehen Sie [fragen]. –

Antwort

0

Sie eine Liste der Ausgänge haben Angenommen, Ihre Arbeiter zurückkehren werden. Unter der Annahme, dass die Reihenfolge von Bedeutung ist, hat diese Liste eine bestimmte Reihenfolge. Grundsätzlich vorausgesetzt, Sie haben dies:

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]]]}, 
] 

Iterieren über die Tasten Ihres Arbeiter Ausgaben wird es viel einfacher machen, diese zu lösen.

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) 
+0

Danke! Genau das, wonach ich gefragt habe. – PythonItsLife

Verwandte Themen