J'ai un dictionnaire ci-dessous:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Comment indexer la première entrée du dictionnaire?
colors[0]
retournera un KeyError
pour des raisons évidentes.
Les dictionnaires ne sont pas ordonnés dans les versions de Python, y compris Python 3.6. Si vous ne vous souciez pas de l'ordre des entrées et souhaitez quand même accéder aux clés ou aux valeurs par index, vous pouvez utiliser d.keys()[i]
et d.values()[i]
ou d.items()[i]
. (Notez que ces méthodes créent une liste de toutes les clés, valeurs et éléments dans Python 2.x. Donc, si vous en avez besoin plusieurs fois, stockez la liste dans une variable pour améliorer les performances.)
Si vous vous souciez de l'ordre des entrées, à partir de Python 2.7, vous pouvez utiliser collections.OrderedDict
. Ou utilisez une liste de paires
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
si vous n'avez pas besoin d'un accès par clé. (Pourquoi vos chiffres sont-ils au fait?)
Dans Python 3.7, les dictionnaires normaux sont ordonnés. Vous n'avez donc plus besoin d'utiliser OrderedDict
(mais vous pouvez toujours le faire - c'est essentiellement du même type). L'implémentation CPython de Python 3.6 incluait déjà ce changement, mais comme il ne fait pas partie des spécifications du langage, vous ne pouvez pas vous en fier à Python 3.6.
Si quelqu'un regarde encore cette question, la réponse actuellement acceptée est maintenant obsolète:
Depuis Python 3.6, les dictionnaires sont préservant l'ordre , c'est-à-dire qu'ils se comportent maintenant exactement comme collections.OrderedDict
s. Malheureusement, il n’existe toujours pas de méthode dédiée pour indexer dans keys()
/values()
du dictionnaire. Il est donc possible d’obtenir la première clé/valeur du dictionnaire comme suit:
first_key = list(colors.keys())[0]
first_val = list(colors.values())[0]
ou bien alternativement (ceci évite d'instancier la vue des clés dans une liste):
def get_first_key(dictionary):
for key in dictionary.keys():
return key
first_key = get_first_key(colors)
first_val = colors[first_key]
Si vous avez besoin d'une n
- ème clé, alors
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
en fait, j'ai trouvé une nouvelle solution qui m'a vraiment aidé. Si vous êtes particulièrement intéressé par l'index d'une certaine valeur dans une liste ou un ensemble de données, vous pouvez simplement définir la valeur du dictionnaire sur cet index!
Regarde juste:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
Maintenant, grâce à la puissance de hashmaps, vous pouvez extraire l'index de vos entrées en temps constant (autrement dit, beaucoup plus rapidement)
S'adresser à un élément du dictionnaire, c'est comme s'asseoir sur un âne et profiter du trajet.
Comme règle de PythonDICTIONARY est sans commande
S'il y a
dic = {1: "a", 2: "aa", 3: "aaa"}
Maintenant, supposons que si je vais comme dic[10] = "b"
, alors ce ne sera pas toujours comme ça
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
Il peut être comme
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
Ou
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
Ou
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
Ou une telle combinaison.
Donc, la règle du pouce estDICTIONNAIREest sans commande !
Si vous avez besoin d'un dictionnaire commandé, vous pouvez utiliser odict .
Vous ne pouvez pas, puisque dict
est non ordonné. vous pouvez utiliser .popitem()
pour obtenir un élément arbitraire, mais cela le supprimera du dict.
import collections
# Declaring namedtuple()
dimensions = collections.namedtuple('colors',['blue','red','yellow'])
S = dimensions('5','6','8')
# Access using index
print ("The dimension of red using index is : ",end ="")
print (S[1])
# Access using name
print ("The dimension of red using keyname is : ",end ="")
print (S.red)
# Access using getattr()
print ("The dimension of red using getattr() is : ",end ="")
print (getattr(S,'red'))
oh, c'est un dur. En gros, vous avez deux valeurs pour chaque élément. Ensuite, vous essayez de les appeler avec un numéro comme clé. Malheureusement, l'une de vos valeurs est déjà définie comme clé!
Essaye ça:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
Vous pouvez maintenant appeler les touches par leur numéro, comme si elles étaient indexées comme une liste. Vous pouvez également référencer la couleur et le numéro en fonction de leur position dans la liste.
Par exemple,
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
Bien sûr, vous devrez trouver un autre moyen de garder une trace de l'emplacement de chaque couleur. Peut-être pouvez-vous avoir un autre dictionnaire qui stocke la clé de chaque couleur comme valeur.
colors_key = {'blue': 1, 'red': 6, 'yllow': 8}
Ensuite, vous pourrez également rechercher la clé de couleurs si nécessaire.
couleurs [colors_key ['blue']] [0] retournera 'blue'
Quelque chose comme ca.
Et puis, pendant que vous y êtes, vous pouvez créer un dict avec les valeurs numériques comme clés afin que vous puissiez toujours les utiliser pour rechercher vos couleurs, vous savez, si vous en avez besoin.
valeurs = {5: [1, 'bleu'], 6: [2, 'rouge'], 8: [3, 'jaune']}
Ensuite, (couleurs [couleurs [clé [valeurs] [5] [1]]] [0]) renverra «bleu».
Ou vous pouvez utiliser une liste de listes.
Bonne chance!
Les dictionnaires ne sont pas des listes.
avec des listes que vous pouvez simplement faire enter foo[0] here
pour obtenir cette valeur.
les dicts ont des fonctions .value et .keys ().
Il est également plus judicieux d’utiliser try/except chaque fois que vous parcourez un dict.
La structure des données du dictionnaire n'étant pas ordonnée, vous ne pouvez pas indexer la première entrée du dictionnaire, alors que nous pouvons indexer les valeurs du dictionnaire.
new_dict= {'first': 'Meghshyam', 'second': 'Sonar', 'third': '1993'}
# ci-dessus, le dictionnaire contient trois valeurs.
#fullowing code write index la première valeur du dictionnaire en utilisant la clé
new_dict['first'][0]
#nous indexons simplement la première lettre de la valeur en utilisant la clé correspondante.
J'espère que cela efface le concept.