Maison  >  Article  >  développement back-end  >  Description détaillée du dictionnaire Python dict

Description détaillée du dictionnaire Python dict

高洛峰
高洛峰original
2017-03-08 10:56:032260parcourir

Le dictionnaire est implémenté selon le principe de la table de hachage. Chaque élément est une paire clé-valeur. Une valeur de hachage unique est calculée grâce à la clé de l'élément. Cette valeur de hachage détermine donc l'adresse de l'élément. pour garantir l'adresse de l'élément Non, il faut s'assurer que la clé de chaque élément et la valeur de hachage correspondante sont complètement différentes, et le type de clé doit être non modifiable, donc le type de clé peut être une valeur numérique, une constante de chaîne ou un tuple, mais ce ne peut pas être une liste car la liste peut être modifiée.

Le dictionnaire a donc les caractéristiques suivantes :

1. Les opérations de requête et d'insertion d'éléments sont très rapides, essentiellement à un niveau constant

2. beaucoup de mémoire, et utilise Méthode d'échange d'espace contre du temps

Initialisation du dictionnaire

Les méthodes suivantes sont équivalentes

d ={'a':1, 'b':2, 'c':3>

d=dict({'a':1, 'b':2, 'c':3})

d = dict([('a',1), ('b', 2), ('c', 3)])

d = dict(a=1, b=2 , c=3)

d = dict(zip(['a', 'b', 'c'], [1,2,3]))#Cette méthode peut également être utilisée pour combiner deux listes sont fusionnées dans un dictionnaire

Éléments attribués

1 e = d# Affectation de référence, e et d sont toujours les mêmes.

2. e = d.copy()# Affectation de valeur, les deux ne sont pas liés

3 d.copy() est une copie superficielle, lorsque la valeur de la valeur-clé. paire rencontre un dictionnaire ou une liste, le dictionnaire ou la liste changera également avec le changement d'origine. À ce moment-là, la valeur est équivalente à la référence ou au pointeur du tuple ou de la liste, pas elle-même. Le tuple ou la liste pointé est en fait le. celui d'origine. Cela peut être évité en utilisant la méthode deepcopy() du module de copie.

import copy

dict1 = {'a': [1, 2], 'b': 3}
dict2 = dict1
dict3 = dict1.copy()
dict4 = copy.deepcopy(dict1)

dict1['b'] = 'change'dict1['a'].append('change')print dict1  # {'a': [1, 2, 'change'], 'b': 'change'}print dict2  # {'a': [1, 2, 'change'], 'b': 'change'}print dict3  # {'a': [1, 2, 'change'], 'b': 3}print dict4  # {'a': [1, 2], 'b': 3}

Ajouter des éléments

1. 4# Ajouter directement via l'indice Si la valeur clé existe déjà, alors l'élément est modifié Bien entendu, vous pouvez également accéder à l'élément

supprimer l'élément .

1. d.clear()#Supprimez tous les éléments dans d

2 d.pop('a')#Supprimez l'élément avec la valeur clé 'a'

3. del d['a']#Supprimer l'élément avec la valeur clé 'a'

Parcourir les éléments

pour k in d:

 imprimer 'd[%s]=' % k,d[k]

ou

pour k,v dans d.items():

print 'd[%s]=' % k,v

ou

for k,v in d.iteritems():

 print 'd [%s] =' % k,v

ou

pour k,v dans d.viewitems() :

 print 'd[%s]=' % k,v

La différence entre items(), iteritems() et viewitems()

les items() de python2.x renvoie une liste contenant tous les éléments de dict comme ce qui précède, mais comme cela gaspillait trop de mémoire, un groupe de fonctions telles que iteritems(), iterkeys() et itervalues() ont ensuite été ajoutées (remarque : commencent à apparaître dans Python 2.2), qui sont utilisées pour renvoyer un itérateur pour économiser de la mémoire, mais l'itérateur Il ne peut pas refléter les changements dans dict après avoir appelé cette fonction. Viewitems() a donc été ajouté, qui représente toujours le dernier élément. Il n'y a qu'une seule fonction items dans Python 3.x, ce qui équivaut à viewitems() dans 2.x.

Fusion de dictionnaire

1. dd = dict(dict1.items() dict2.items())

Mais Cette efficacité n'est pas élevée. Selon les conseils d'analyse ci-dessus, il appelle en fait les éléments pour renvoyer d'abord la liste correspondante, puis effectue l'ajout de liste et enfin initialise la liste dans un dictionnaire

2. dict1, **dict2)

Les clés du dictionnaire doivent être des chaînes. Dans Python 2 (l'interpréteur est CPython), nous pouvons utiliser des clés non-chaînes comme clés, mais ne vous y trompez pas : ce hack fonctionne simplement dans Python 2 en utilisant l'environnement d'exécution standard CPython.

L'instruction ci-dessus est équivalente à

dd = dict1.copy()

dd.update(dict2)

où dd.update(dict2) est équivalent à

for k dans dict2

 dd[k] = dict2[k]

On voit que la fonction de mise à jour peut non seulement ajouter des éléments inexistants éléments, mais modifie également les éléments existants. La valeur de l'élément de la clé.

Et d'après ce qui précède, nous savons que les dictionnaires peuvent également être fusionnés via une mise à jour et pour...in.

Trier

dict = { : ,  : ,  : ,  :  sorted(dict.items(), key= sorted(dict.items(), key= d: d[1])

ls = list(dict.keys())
ls.sort()
for k in ls:
    print(k, dict[k])

for k in sorted(dict.keys()):
    print(k, dict[k])

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn