Je veux que python analyse la chaîne "" utilisateur: 12345 emplacement: ny recherche "

Ensuite, je peux utiliser:

if "user" in string:
....

if "location" in string:
...

Y a-t-il un moyen existant de le faire?

0
Bin Chen 15 oct. 2011 à 16:08

3 réponses

Meilleure réponse

Bien que la version originale de la réponse d'unutbu soit impressionnante, re semble maintenant un peu exagéré. En voici une plus simple:

>>> text = 'user:12345 location:ny search'
>>> dict(pair.split(":") for pair in text.split() if ":" in pair)
{'user': '12345', 'location': 'ny'}

Modifier:

Pour insérer "search" avec la clé "keyword":

>>> dict(([] if ":" in pair else ["keyword"]) + pair.split(":") for pair in text.split())
{'user': '12345', 'keyword': 'search', 'location': 'ny'}
3
Avaris 15 oct. 2011 à 13:41

Il pourrait y avoir une meilleure façon de le faire, mais voici ce que j'ai trouvé:

mydict = {}
for pair in mystring.split(' '):
    parts = pair.split(':')
    if len(parts)>1
     mydict{parts[0]:parts[1]

Mais cela implique que ni les clés, ni les valeurs ne peuvent contenir d'espaces. La séparation des paires par des virgules pourrait résoudre ce problème.

La meilleure chose à faire serait de les encoder et de les décoder en json, ce qui donnerait ceci:

Utilisateur: {'user_id': 1234, 'location': 'ma recherche'}

Les bibliothèques python standard contiennent une bibliothèque d'encodage et de décodage json.

0
bigblind 15 oct. 2011 à 12:28

Une solution simple et directe si la chaîne est toujours dans ce format:

if string.find('user:') > -1:
    user = string[string.find('user:' + len('user:'):string.find('location:') - 1]
    ....
if string.find('location:') > -1:
    location = string[string.find('location:') + len('location:')]
    ...
0
TigOldBitties 15 oct. 2011 à 12:32