Disons que j'ai une liste a
en Python dont les entrées correspondent à un dictionnaire. Chaque élément pair représente la clé du dictionnaire et l'élément impair suivant est la valeur
par exemple,
a = ['hello','world','1','2']
et j'aimerais le convertir en dictionnaire b
, où
b['hello'] = 'world'
b['1'] = '2'
Quelle est la manière syntaxiquement la plus claire pour y parvenir?
python
list
dictionary
Mike
la source
la source
Réponses:
Si
a
est grand, vous voudrez probablement faire quelque chose comme ce qui suit, qui ne fait pas de listes temporaires comme ci-dessus.Dans Python 3, vous pouvez également utiliser une compréhension de dict, mais ironiquement, je pense que le moyen le plus simple de le faire sera avec
range()
etlen()
, qui serait normalement une odeur de code.La
iter()/izip()
méthode est donc probablement la plus pythonique de Python 3, bien que, comme le note EOL dans un commentaire,zip()
soit déjà paresseuse dans Python 3, vous n'en avez donc pas besoinizip()
.Si vous le voulez sur une seule ligne, vous devrez tricher et utiliser un point-virgule. ;-)
la source
zip(i, i)
, en Python 3, puisquezip()
now renvoie un itérateur.Réponse simple
Une autre option (avec l'aimable autorisation d' Alex Martelli - source ):
Note connexe
Si vous avez ceci:
et vous voulez ceci (chaque élément de la liste saisissant une valeur donnée (2 dans ce cas)):
vous pouvez utiliser:
la source
fromkeys
.>>> dict.fromkeys(a, 2) {'bi': 2, 'double': 2, 'duo': 2, 'two': 2}
Vous pouvez utiliser une compréhension de dict pour cela assez facilement:
Ceci est équivalent à la boucle for ci-dessous:
la source
Quelque chose que je trouve plutôt cool, c'est que si votre liste ne contient que 2 éléments:
Rappelez-vous que dict accepte tout itérable contenant un itérable où chaque élément de l'itérable doit lui-même être un itérable avec exactement deux objets.
la source
Peut-être pas le plus pythonique, mais
la source
enumerate
for i, key in enumerate(a[::2]):
. Toujours impythonique puisque le constructeur de dict peut faire la plupart du travail ici pour vousfor i, key in enumerate(a[::2]):
approche pourrait fonctionner? Les valeurs de paire résultantes seraient0 hello
et1 1
, et je ne sais pas comment les utiliser pour produire{'hello':'world', '1':'2'}
.enumerate(a)[::2]
Vous pouvez le faire assez rapidement sans créer de tableaux supplémentaires, donc cela fonctionnera même pour de très grands tableaux:
Si vous avez un générateur
a
, encore mieux:Voici le résumé:
la source
{'hello':'hello','world':'world','1':'1','2':'2'}
)Vous pouvez également le faire comme ceci (conversion de chaîne en liste ici, puis conversion en dictionnaire)
la source
Je suis également très intéressé d'avoir une ligne unique pour cette conversion, dans la mesure où une telle liste est l'initialiseur par défaut pour le hachage en Perl.
Une réponse exceptionnellement complète est donnée dans ce fil -
Le mien, je suis novice en Python), en utilisant les expressions du générateur Python 2.7 , serait:
dict((a[i], a[i + 1]) for i in range(0, len(a) - 1, 2))
la source
Je ne sais pas si c'est pythonique, mais semble fonctionner
la source
essayez ci-dessous le code:
la source
Vous pouvez également essayer cette approche, enregistrer les clés et les valeurs dans une liste différente, puis utiliser la méthode dict
production:
la source
la source