2009-09-27 10 views
0

Existe-t-il un moyen facile de créer un dictionnaire comme un tableau associatif en php? en php je peux faire:Créer automatiquement la prochaine clé dans le dictionnaire python

> $x='a'; 
> while($x<d){ 
>  $arr[]['Letter']=$x; 
>  $x++ 
>  } 

L'interprète ajoute automatiquement un nouveau numéro entre parenthèses vides « [] » que je puisse accéder à la lettre b de $arr[1]['Letter'], etc.

Est-il possible de le faire même avec python?

Répondre

3

Edit: Je suis stupide. Bien sûr, il existe un moyen de le faire en Python. Comme si:

result = [{'Letter': chr(i+97)} for i in range(26)] 

Cela vous donnera une liste. Qui peut être indexé avec un nombre. Donc result[1]['Letter'] vous donnera 'b'.

+0

Grande solution :) merci – Chris

3

L'indexation entre parenthèses vides est syntaxiquement invalide dans Python, mais vous pourriez éventuellement programmer une classe qui prend par exemple. [None] comme un signal pour ajouter une clé supplémentaire avec un dict comme valeur et un entier incrémenté comme clé. Avant de faire l'effort substantiel pour programmer une telle classe, j'aimerais comprendre le vrai problème que vous essayez de résoudre cela, par exemple. un collections.defaultdict ne répondrait pas.

+0

Comme un temps solution ary j'ai utilisé defaultdict. – Chris

0

Déjà mentionné que Python ne le supporte pas par défaut.

Vous pouvez obtenir cet effet en utilisant la longueur du dictionnaire, comme ceci:

>>> arr = {'letter':{1:'a'}} 
>>> arr 
{'letter': {1: 'a'}} 
>>> arr['letter'][len(arr['letter'])+1] = 'b' 
>>> arr['letter'][len(arr['letter'])+1] = 'c' 
>>> arr['letter'][len(arr['letter'])+1] = 'd' 
>>> arr 
{'letter': {1: 'a', 2: 'b', 3: 'c', 4: 'd'}} 
>>> 
2

Dans les listes de python et des dictionnaires sont des types distincts. PHP a le type pour les gouverner tout le tableau associatif.

Je pense que ce que vous voulez faire se traduit en une liste de dictionnaires en python, comme celui-ci

x = [ dict(Letter=chr(i)) for i in range(ord('a'),ord('f')) ] 

Si vous essayez ceci dans l'interpréteur

>>> x = [ dict(Letter=chr(i)) for i in range(ord('a'),ord('f')) ] 
>>> x 
[{'Letter': 'a'}, {'Letter': 'b'}, {'Letter': 'c'}, {'Letter': 'd'}, {'Letter': 'e'}] 
>>> x[0] 
{'Letter': 'a'} 
>>> x[1] 
{'Letter': 'b'} 
>>> x[1]['Letter'] 
'b' 
>>> 

Ou si vous le préférez écrit dans le plein sans une compréhension de liste

x = [] 
for c in range(ord('a'),ord('f')): 
    d = { 'Letter': chr(c) } 
    x.append(d) 
+0

Je pense que vous êtes le premier ici qui a obtenu ce que le PO essayait d'accomplir. – itsadok

Questions connexes