Essayer de convertir cette chaîne (insérez la variable a1):

 '\'redis_import\':\'start\',\'redis_import\':\'dim_user_level\''

À:

'\'start\':\'redis_import\',\'dim_user_level\':\'redis_import\''

J'ai essayé print a1.split(',').reverse() mais cela renvoie null. Pourquoi? et comment y parvenir sans utiliser de boucle?

Toute aide est appréciée.

2
SuperDelta 12 avril 2018 à 12:32

3 réponses

Meilleure réponse

Fractionner sur virgule, fractionner sur deux-points, inverser, joindre des deux-points, joindre des virgules:

s = '\'redis_import\':\'start\',\'redis_import\':\'dim_user_level\''
','.join(':'.join(i.split(':')[::-1]) for i in s.split(','))
#"'start':'redis_import','dim_user_level':'redis_import'"

Pour mieux comprendre cela, observez simplement la sortie de ces différents appels:

>>> s.split(',')
["'redis_import':'start'", "'redis_import':'dim_user_level'"]
>>> s.split(',')[0]
"'redis_import':'start'"
>>> s.split(',')[0].split(':')
["'redis_import'", "'start'"]
>>> s.split(',')[0].split(':')[::-1]
["'start'", "'redis_import'"]
>>> ','.join(('a', 'b', 'c'))
'a,b,c'
>>> [i[::-1] for i in [[1,2], [3,4]]]
[[2, 1], [4, 3]]

Quelques lectures supplémentaires:

1
Joe Iddon 12 avril 2018 à 09:57

Tout d'abord, la méthode .reverse() inverse la liste et renvoie None

Vous pouvez donc utiliser inversé () qui vous rendra l'itérateur de l'inverse de la liste

a =  '\'redis_import\':\'start\',\'redis_import\':\'dim_user_level\''

print(', '.join([':'.join(reversed(i.split(':'))) for i in a.split(',')])) # "'start':'redis_import', 'dim_user_level':'redis_import'"
2
Gahan 12 avril 2018 à 09:48

Si vous le voulez comme dicton.

s = '\'redis_import\':\'start\',\'redis_import\':\'dim_user_level\''
res = {}
for i in s.split(","):
    val =  list(reversed(i.split(":")))
    res[val[0].replace("'", "")] = val[1].replace("'", "")    
print(res)

Sortie:

{'start': 'redis_import', 'dim_user_level': 'redis_import'}
2
Rakesh 12 avril 2018 à 09:43