J'ai 2 listes dans une classe python3:
self.keys = ["a","b","c","d"]
self.values = [1,2,3,4]
Len (self.keys) == len (self.values), toujours.
Je veux créer une chaîne qui imite la sortie d'impression d'un dictionnaire: {a:1, b:2, c:3, d:4}
Je le fais dans une méthode qui contient:
sr = ""
for i,k in enumerate(self.keys):
sr += "{}:{},".format(k,self.values[i])
return "{%s}" % sr[:len(sr)-1]
Est-ce possible en une seule ligne? sinon, existe-t-il une meilleure façon de procéder?
3 réponses
Utilisez zip, puis faites-en un dict:
keys = ["a","b","c","d"]
values = [1,2,3,4]
dict(zip(keys, values))
Production:
{'b': 2, 'a': 1, 'c': 3, 'd': 4}
Pourquoi ne pas simplement imprimer un dictionnaire? Utilisez zip pour créer des tuples des paires, puis passez les au constructeur dict.
print(dict(zip(self.keys, self.values)))
Si vous souhaitez obtenir exactement le format produit par votre code d'origine avec une seule ligne de code, vous pouvez utiliser
from itertools import starmap
print("{%s}" % ",".join(starmap("{}:{}".format, zip(keys, values))))
Je ne suis pas sûr que ce soit plus lisible que votre code d'origine.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.