Ajout de tableaux associatifs en Python
J'ai été partout dans le monde à la recherche d'une solution à cela récemment, et jusqu'à présent en vain. Je viens de php à python, et en cours d'exécution dans un tableau associatif différence, je ne suis pas sûr maintenant à surmonter.
Prendre cette ligne:
data[user]={i:{'item':row[0],'time':row[1]}}
Cela remplace chacun de mes data[user]
entrées, évidemment, comme ce n'est pas l'ajout, c'est juste en remplaçant les données à chaque fois.
En php si je voulais ajouter un nouveau bit de données dans une boucle for, je pourrais faire
data[user][i][]=array('item'=>'x','time'=>'y'); // crude example
En python, je ne peux pas faire:
data[user][]={i:{'item':row[0],'time':row[1]}}
Il barfs sur mon []
Je ne peux pas faire:
data[user][i]={'item':row[0],'time':row[1]}
où I est mon itérateur à travers la boucle... et je pense que c'est parce que le data[user]
n'a pas été défini, mais, comme de l'exploitation? J'ai créé le data={}
, mais je ne l'ai rempli avec les utilisateurs clés, encore.
En python, dois-je avoir une clé définie avant que je puisse le définir, y compris une sous-clé?
J'ai essayé un tas de .append()
options, et d'autres trucs bizarre, mais je veux savoir la corriger méthode de le faire.
Je peut faire:
data[user,i]={'item':row[0],'time':row[1]}
mais ce n'est pas ce que je veux.
Ce qui est de ma méthode appropriée ici, python amis?
- Bon, il semble que je n'ai pas été aussi clair que je l'avais espéré. La question n'est pas d'ajouter des données[user]=trucs. Le problème est l'ajout de data[user][i]=trucs
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme cela devrait fonctionner. Notez que contrairement à PHP, Python a différents types de primitives pour les tableaux numériques (appelées "listes") et des tableaux associatifs (appelé "dictionnaires" ou "dicts").
array.array
.defaultdict
est la voie à suivre si vous pouvez l'utiliser. Je n'ai pas l'utiliser parce que les OP pourraient être dans une situation où ils ne peuvent pas (par exemple, sidata
est fourni par un autre module de la bibliothèque)defaultdict(partial(raw_input, "initial_string? "))
data
n'est pas sous le contrôle de l'OP, donc ils sont coincés avec ce type il est. Par exemple, sidata = shelve.open(...)
?Vous pouvez également utiliser setdefault() et faire quelque chose comme:
Si
data[user]
est une liste, vous pouvez ajouter avecdata[user].append({'item':row[0],'time':row[1]})
.