Code:
d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print l
Ceci affiche ['a', 'c', 'b']. Je ne sais pas comment la méthode keys détermine l'ordre des mots-clés dans l . Toutefois, j'aimerais pouvoir retrouver les mots-clés dans l'ordre "approprié". Le bon ordre bien sûr créerait la liste ['a', 'b', 'c'].
Vous pouvez utiliser OrderedDict (requiert Python 2.7) ou une version ultérieure.
Notez également que OrderedDict({'a': 1, 'b':2, 'c':3})
ne fonctionnera pas, car la dict
que vous créez avec {...}
a déjà oublié l'ordre des éléments. Au lieu de cela, vous souhaitez utiliser OrderedDict([('a', 1), ('b', 2), ('c', 3)])
.
Comme mentionné dans la documentation, pour les versions inférieures à Python 2.7, vous pouvez utiliser this recipe.
En Python 3.7.0 le caractère de préservation de l'ordre d'insertion de dict
objects a été déclaré comme faisant partie intégrante des spécifications du langage Python. Par conséquent, vous pouvez en dépendre.
A partir de Python 3.6, pour l’implémentation CPython de Python, les dictionnaires maintiennent l’ordre d’insertion par défaut. Ceci est considéré comme un détail de mise en œuvre cependant; vous devriez toujours utiliser collections.OrderedDict
si vous voulez un ordre d'insertion garanti par d'autres implémentations de Python.
Utilisez la classe collections.OrderedDict
lorsque vous avez besoin d'une dict
qui rappelle L'ordre des éléments insérés.
>>> print sorted(d.keys())
['a', 'b', 'c']
Utilisez la fonction sorted , qui trie l’itéré transmis.
La méthode .keys()
renvoie les clés dans un ordre arbitraire.
Il suffit de trier la liste lorsque vous souhaitez l'utiliser.
l = sorted(d.keys())
De http://docs.python.org/tutorial/datastructures.html :
"La méthode keys () d'un objet dictionnaire renvoie la liste de toutes les clés utilisées dans le dictionnaire, dans un ordre arbitraire (si vous souhaitez le trier, appliquez simplement la fonction trié ())."
Bien que l'ordre n'ait pas d'importance car le dictionnaire est hashmap. Cela dépend de l'ordre dans lequel il est poussé:
s = 'abbc'
a = 'cbab'
def load_dict(s):
dict_tmp = {}
for ch in s:
if ch in dict_tmp.keys():
dict_tmp[ch]+=1
else:
dict_tmp[ch] = 1
return dict_tmp
dict_a = load_dict(a)
dict_s = load_dict(s)
print('for string %s, the keys are %s'%(s, dict_s.keys()))
print('for string %s, the keys are %s'%(a, dict_a.keys()))
sortie:
pour la chaîne abbc, les clés sont dict_keys (['a', 'b', 'c'])
pour la chaîne cbab, les clés sont dict_keys (['c', 'b', 'a'])