Hoe kan ik een array/lijst met woordenboeken maken in python?

Ik heb een woordenboek als volgt:

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

Ik wil als volgt een array met veel woordenboeken maken:

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

Dit is mijn code:

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

Maar het werkt natuurlijk niet. Kan iemand mij een hint geven? Bedankt.


Antwoord 1, autoriteit 100%

Zo heb ik het gedaan en het werkt:

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

Het geeft je een lijst met n lege woordenboeken.


Antwoord 2, autoriteit 43%

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

Antwoord 3, autoriteit 24%

Gebruik

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

Antwoord 4, autoriteit 15%

Kleine variatie op het antwoord van gebruiker1850980 (voor de vraag “Hoe een lijst met lege woordenboeken te initialiseren”) met behulp van de lijstconstructor:

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

Tot mijn ergernis kwam ik erachter dat dit NIET werkt:

dictlistFAIL = [{}] * listsize  # FAIL!

omdat het een lijst met verwijzingen naar het dezelfdelege woordenboek maakt, zodat als u één woordenboek in de lijst bijwerkt, alle andere verwijzingen ook worden bijgewerkt.

Probeer deze updates om het verschil te zien:

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

(Ik was eigenlijk op zoek naar het antwoord van gebruiker1850980 op de gestelde vraag, dus zijn/haar antwoord was nuttig.)


Antwoord 5, autoriteit 10%

Probeer dit:

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

Antwoord 6, autoriteit 6%

Ik neem aan dat motifWidtheen geheel getal bevat.

In Python veranderen lijsten niet van grootte, tenzij u dat aangeeft. Daarom genereert Python een uitzondering wanneer u een element probeert te wijzigen dat er niet is. Ik geloof dat je wilt:

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

Voor wat het waard is, als je in de toekomst vragen stelt, zou het helpen als je de stacktracering opneemt die de foutmelding laat zien die je krijgt in plaats van alleen maar te zeggen “het werkt niet”. Dat zou ons helpen de oorzaak van het probleem direct te achterhalen, in plaats van te proberen het uit uw code te halen.

Hopelijk helpt dat!


Antwoord 7

Woordenboek:

dict = {'a':'a','b':'b','c':'c'}

array van woordenboek

arr = (dict,dict,dict)
arr
({'a': 'a', 'c': 'c', 'b': 'b'}, {'a': 'a', 'c': 'c', 'b': 'b'}, {'a': 'a', 'c': 'c', 'b': 'b'})

Other episodes