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
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.
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)
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)
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))
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
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