La façon la plus rapide pour convertir une dict touches de & les valeurs de `unicode` à `str`?
Je suis la réception d'une dict à partir d'une "couche" de code sur lequel certains calculs et des modifications sont effectuées avant de la passer sur une autre "couche". L'original dict touches de & "string" les valeurs sont unicode
, mais la couche qu'ils sont passés à accepte uniquement str
.
Cela va être appelé souvent, donc j'aimerais savoir quel serait le moyen le plus rapide pour convertir quelque chose comme:
{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }
...à:
{ 'spam': 'eggs', 'foo': True, 'bar': { 'baz': 97 } }
...en tenant compte de la non-"chaîne de valeurs" besoin de rester aussi leur type d'origine.
Toutes les pensées?
Vous devez vous connecter pour publier un commentaire.
Hypothèses:
data.encode('utf-8')
plutôt questr(data)
si vous avez besoin d'un codage explicite).Si vous avez besoin de l'appui d'autres types de conteneurs, j'espère que c'est évident pour vous de suivre le modèle et ajouter des cas pour eux.
RuntimeError: maximum recursion depth exceeded
. Mon dict était des plus simples: {'Login': 'zxczxc', 'Nom': '\xd0\x98\xd0\xbc\xd1\x8f', 'Nom': '\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5'}if isinstance(data, basestring):
au lieuif isinstance(data, unicode):
type(data)(map(convert, data))
au lieumap(convert, data)
?if isinstance(data, basestring):
àif isinstance(data, str):
convert
module en Python 3 🙁Je sais je suis en retard sur celui-ci:
str
sur un intSi vous voulais le faire en ligne et qu'il n'avait pas besoin de descente récursive, cela peut fonctionner:
{ str(key):value for key,value in data.items() }
de clé et de la valeur, et ajouter de la récursivité à votre code de compte à l'intérieur de dictionnaire.
pour un non-imbriquées dict (puisque le titre ne fait pas mention de ce cas, il peut être intéressant pour d'autres personnes)
De faire tout cela en ligne (non récursif):