convertit une chaîne à la dict l'aide de la liste de compréhension
Que je suis venu sur ce problème quelques fois et il ne semble pas possible de trouver une solution simple.
Dire que j'ai une chaîne
string = "a=0 b=1 c=3"
Je veux les convertir dans un dictionnaire avec a, b et c étant la clé et 0, 1, et 3 cours de leurs valeurs respectives (converti en int). Évidemment, je peux faire ceci:
list = string.split()
dic = {}
for entry in list:
key, val = entry.split('=')
dic[key] = int(val)
Mais je n'aime pas vraiment que pour la boucle, Elle semble tellement simple que vous devriez être en mesure de le convertir à une sorte de liste de la compréhension de l'expression. Et qui fonctionne pour un peu plus simple des cas où la val
peut être une chaîne de caractères.
dic = dict([entry.split('=') for entry in list])
Cependant, j'ai besoin de convertir val int à la volée et de faire quelque chose comme ceci est syntaxiquement incorrect.
dic = dict([[entry[0], int(entry[1])] for entry.split('=') in list])
Donc ma question est: est-il un moyen d'éliminer la boucle de l'aide de la liste de compréhension? Si non, est-il intégré dans la méthode python qui le fera pour moi?
string
, list
, etc.)OriginalL'auteur Pavel | 2009-08-07
Vous devez vous connecter pour publier un commentaire.
Voulez-vous dire cela?
Oakley: je suis d'accord. La question ("est-il un moyen d'éliminer la boucle de l'aide de la liste de compréhension") a une réponse. Cependant, la réponse peut ne pas être ce qu'ils vraiment voulu.
Oui c'est ce que je cherchais. Je vous remercie. @Bryan: je commence à penser que peut-être garder que pour la boucle est probablement une bonne idée. Néanmoins, au moins maintenant je sais comment faire cela en une seule ligne.
OriginalL'auteur S.Lott
Comment faire un one-liner sans compréhension de liste?
Le foo.replace() tourne "a=0 b=1 c=3" dans "a=0,b=1,c=3". La mise en forme de chaîne crée une nouvelle chaîne "dict(a=0,b=1,c=3)". Eval qui pratiquent cette chaîne produit souhaité dict.
Il m'a fallu un moment pour comprendre..
OriginalL'auteur Vicki Laidler
Essayez la suivante:
OriginalL'auteur
Parfois, j'aime cette approche, en particulier lors de la logique pour la fabrication de clés et de valeurs est plus compliqué:
OriginalL'auteur
Aujourd'hui, vous devriez probablement utiliser un dictionnaire, la compréhension, introduit en 2.7:
Le dictionnaire, la compréhension est plus rapide et plus brillants (et, à mon avis, plus lisible).
OriginalL'auteur dantiston
imprime
OriginalL'auteur nosklo
Je voudrais faire cela:
OriginalL'auteur Tadhg
J'aime S. Lott est la solution, mais j'ai trouvé une autre possibilité.
Puisque vous avez déjà une chaîne qui ressemble en quelque sorte la façon dont vous voulez écrire, vous pouvez tout simplement l'adapter à la syntaxe de python et puis eval ():)
La regex ici est assez cru et ne prends pas tous les identifiants python, mais je voulais garder les choses simples pour des raisons de simplicité.
Bien sûr, si vous avez le contrôle sur la façon dont la chaîne d'entrée est généré, il suffit de le générer en fonction de la syntaxe de python et eval.
MAIS bien sûr, vous devez effectuer d'autres vérifications pour s'assurer qu'aucun code n'est injecté il y!
OriginalL'auteur Agos