Écrire du code semblable à Python (dictionnaire)

introduction

Comme c'était un gros problème d'apprendre Python, j'ai étudié comment l'écrire comme Python. Python-ness est d'accord avec le code efficace de Python.

Diapositive référencée https://speakerdeck.com/pyconslides/transforming-code-into-beautiful-idiomatic-python-by-raymond-hettinger-1 http://kesin.hatenablog.com/entry/2013/05/12/004541

Comment utiliser le dictionnaire

C'est comme Python, et l'utilisation d'un dictionnaire est une technique très importante et basique. Il semble y avoir un bon moyen de prendre soin du dictionnaire.

Boucle avec clé

Vous pouvez boucler par clé, soit en spécifiant un dictionnaire, soit en utilisant la méthode keys de l'objet dictionnaire.

d = {'kaijo': 'red', 'shinmei': 'blue', 'ooiwa': 'yellow', 'pegie': 'pink', 'asuka': 'green'}
for k in d:
    print(k)
    
for k in d.keys():
    print(k)

Clé, boucle de valeur

En tant que méthode de bouclage de la clé et de la valeur, il est possible de boucler par la clé supérieure et d'obtenir la valeur de la clé. Les dictionnaires Python ont une méthode ʻitems` qui élimine le besoin de récupérer des valeurs du dictionnaire en utilisant des clés. De plus, les variables de valeur peuvent être librement déterminées, ce qui facilite la lecture du code.

d = {'kaijo': 'red', 'shinmei': 'blue', 'ooiwa': 'yellow', 'pegie': 'pink', 'asuka': 'green'}
for k in d:
    print(k, '->', d[k])

for k, v in d.items():
    print(k, '->', v)

Créer un dictionnaire à partir de deux listes

Si vous disposez déjà d'une liste de clés et d'une liste de valeurs, vous pouvez les combiner pour créer un dictionnaire. Vous pouvez le faire sans utiliser l'instruction for.

from itertools import izip

keys = ['kaijo', 'shinmei', 'ooiwa', 'pegie', 'asuka']
values = ['red', 'blue', 'yellow', 'pink', 'green']

d = dict(izip(keys, values))

Si vous voulez créer un dictionnaire avec des numéros de série de type index, vous pouvez utiliser ʻenumerate`.

values = ['red', 'blue', 'yellow', 'pink', 'green']

d = dict(enumerate(values))

Compter à l'aide d'un dictionnaire

Lors du traitement du nombre de fois où le même mot apparaît dans une phrase anglaise, il est facile d'imaginer le traitement suivant.

colors = ['red', 'green', 'red', 'blue', 'green', 'red']

d = {}
for color in colors:
    if not color in d:
        d[color] = 0
    d[color] += 1

La méthode get du dictionnaire renvoie le nombre de clés que vous avez spécifiées, mais s'il n'y a pas de clés, elle renvoie la valeur donnée dans l'argument. Vous pouvez l'utiliser pour écrire comme suit.

colors = ['red', 'green', 'red', 'blue', 'green', 'red']

d = {}
for color in colors:
    d[color] = d.get(color, 0) + 1

Le defaultdict du module collections a la possibilité d'ajouter s'il n'y a pas de clé. Vous pouvez également l'utiliser pour écrire comme suit. C'est plus facile à lire que d'utiliser get.

from collections import defaultdict

colors = ['red', 'green', 'red', 'blue', 'green', 'red']

d = defaultdict(int)
for color in colors:
    d[color] += 1

Regroupement à l'aide d'un dictionnaire

Par exemple, si vous avez une liste de mots et que vous souhaitez les regrouper par nombre de caractères dans le mot, il existe un code simple pour définir une valeur par défaut (dans ce cas, une liste qui stocke les noms) lorsqu'il n'y a pas de clé. Vous pouvez utiliser la méthode setdefault pour stocker la valeur par défaut.

names = ['raymond', 'rachel', 'matthew', 'ronger', 'betty', 'melissa', 'judith', 'charlie']

d = {}
for name in names:
    key = len(name)
    if not key in d:
        d[key] = []
    d[key].append(name)

d2 = {}
for name in names:
    key = len(name)
    d2.setdefault(key, []).append(name)

Cela peut être écrit comme suit en utilisant le précédent defaultdict. La déclaration ʻSi` a disparu et elle est élégante.

from collections import defaultdict

names = ['raymond', 'rachel', 'matthew', 'ronger', 'betty', 'melissa', 'judith', 'charlie']

d = defaultdict(list)
for name in names:
    key = len(name)
    d[key].append(name)

Recommended Posts

Écrire du code semblable à Python (dictionnaire)
Écrire du code de type python
Ecrire l'entrée standard dans le code
Ecrire Spigot dans VS Code
Écrivez, compilez et exécutez du code sur codeanywhere.com
Ecrire le code de test du sélénium en python
Notes pour écrire du code de type Python
Écrivez le code de contrat Ethereum en utilisant Serpent
Qiita (1) Comment écrire un nom de code
Écrivez du code FizzBuzz piloté par les tests à l'aide de Python doctest.
N'est-il pas acceptable d'écrire du code de test?