it-swarm.com.de

Wie kann ich ein Array / eine Liste von Wörterbüchern in Python erstellen?

Ich habe ein Wörterbuch wie folgt:

{'A':0,'C':0,'G':0,'T':0}

Ich möchte wie folgt ein Array mit vielen Wörterbüchern erstellen:

[{'A':0,'C':0,'G':0,'T':0},{'A':0,'C':0,'G':0,'T':0},{'A':0,'C':0,'G':0,'T':0},...]

Das ist mein Code:

weightMatrix = []
for k in range(motifWidth):
    weightMatrix[k] = {'A':0,'C':0,'G':0,'T':0}

Aber es funktioniert natürlich nicht. Kann mir jemand einen Tipp geben? Vielen Dank.

56
Adrian Randall

So habe ich es gemacht und es funktioniert:

dictlist = [dict() for x in range(n)]

Sie erhalten eine Liste mit n leeren Wörterbüchern.

54
user1850980
weightMatrix = [{'A':0,'C':0,'G':0,'T':0} for k in range(motifWidth)]
28
dan04

Verwenden

weightMatrix = []
for k in range(motifWidth):
    weightMatrix.append({'A':0,'C':0,'G':0,'T':0})
11
Tim Pietzcker

Kleinere Abweichungen zur Antwort von user1850980 (für die Frage "So initialisieren Sie eine Liste leerer Wörterbücher") mithilfe des Listenkonstruktors:

dictlistGOOD = list( {} for i in xrange(listsize) )

Ich habe zu meinem Leidwesen herausgefunden, dass dies NICHT funktioniert:

dictlistFAIL = [{}] * listsize  # FAIL!

beim Erstellen einer Liste mit Verweisen auf das gleiche leere Wörterbuch werden auch alle anderen Verweise aktualisiert, wenn Sie ein Wörterbuch in der Liste aktualisieren.

Probieren Sie diese Updates aus, um den Unterschied zu erkennen:

dictlistGOOD[0]["key"] = "value"
dictlistFAIL[0]["key"] = "value"

(Ich habe tatsächlich nach der Antwort von user1850980 auf die gestellte Frage gesucht, daher war seine/ihre Antwort hilfreich.)

6
Clem Wang

Ich gehe davon aus, dass motifWidth eine ganze Zahl enthält.

In Python ändern Listen ihre Größe nur, wenn Sie sie dazu auffordern. Daher löst Python eine Ausnahme aus, wenn Sie versuchen, ein Element zu ändern, das nicht vorhanden ist. Ich glaube, Sie möchten:

weightMatrix = []
for k in range(motifWidth):
    weightMatrix.append({'A':0,'C':0,'G':0,'T':0})

Wenn Sie in Zukunft Fragen stellen, ist es hilfreich, wenn Sie den Stack-Trace einbinden, der den Fehler anzeigt, den Sie erhalten, anstatt nur zu sagen, dass er nicht funktioniert. Das würde uns helfen, die Ursache des Problems direkt herauszufinden, anstatt zu versuchen, es aus Ihrem Code herauszufinden.

Hoffentlich hilft das!

4

Versuche dies:

lst = []
##use append to add items to the list.

lst.append({'A':0,'C':0,'G':0,'T':0})
lst.append({'A':1,'C':1,'G':1,'T':1})

##if u need to add n no of items to the list, use range with append:
for i in range(n):
    lst.append({'A':0,'C':0,'G':0,'T':0})

print lst
2
Avinash