web-dev-qa-db-fra.com

Comment créer un tableau / une liste de dictionnaires en python?

J'ai un dictionnaire comme suit:

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

Je souhaite créer un tableau contenant de nombreux dictionnaires, comme suit:

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

Ceci est mon code:

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

Mais bien sûr, ça ne marche pas. Quelqu'un peut-il me donner un indice? Merci.

56
Adrian Randall

Voici comment je l'ai fait et ça marche:

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

Il vous donne une liste de n dictionnaires vides.

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

Utilisation

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

Variation mineure de la réponse de user1850980 (pour la question "Comment initialiser une liste de dictionnaires vides") à l'aide du constructeur de liste:

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

J'ai découvert à mon grand chagrin, cela ne fonctionne pas:

dictlistFAIL = [{}] * listsize  # FAIL!

car il crée une liste de références au même dictionnaire vide, de sorte que si vous mettez à jour un dictionnaire de la liste, toutes les autres références seront également mises à jour.

Essayez ces mises à jour pour voir la différence:

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

(En fait, je cherchais la réponse de l'utilisateur1850980 à la question posée, sa réponse a donc été utile.)

6
Clem Wang

Je suppose que motifWidth contient un entier.

En Python, les listes ne changent pas de taille sauf si vous leur dites de le faire. Par conséquent, Python lève une exception lorsque vous essayez de modifier un élément qui n'y est pas. Je crois que vous voulez:

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

Pour ce qui en vaut la peine, lorsque vous posez des questions à l'avenir, il serait utile que vous incluiez la trace de pile indiquant l'erreur que vous obtenez plutôt que de simplement dire "cela ne fonctionne pas". Cela nous aiderait à déterminer directement la cause du problème, plutôt que d'essayer de l'intégrer à votre code.

J'espère que ça t'as aidé!

4
Daniel Stutzbach

Essaye ça:

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