0
votes

J'ai une dict où tous les éléments sont des octets. Comment puis-je obtenir un dict de chaînes?

Exemple - J'ai un dict comme celui-ci: xxx

Comment puis-je le convertir en dict où les chaînes et les valeurs sont toutes des chaînes?


0 commentaires

4 Réponses :


0
votes

Utilisez Decode:

b'somestring'.decode('utf-8')


1 commentaires

Et pour le faire pour votre dict, vous pouvez utiliser quelque chose comme ceci, où d est le dictionnaire que vous avez posté décodé = {key.decode ("utf-8"): {k.decode ("UTF-8"): V.Decode ("UTF-8") pour (k, V) en valeur.items ()} pour (clé, valeur) dans d.items ()} pour plus Information: Stackoverflow.com/Questtions/606191/Convert -Boes -à-a-string



1
votes
def decode_dict(d, encoding_used = 'utf-8'):
    return { k.decode(encoding_used) : (v.decode(encoding_used) if isinstance(v, bytes) else decode_dict(v, encoding_used)) for k, v in d.items() }

new_dict = decode_dict({b'mykey': {b'inner_key': b'inner_value'}})
print(new_dict)
If your encoding is not UTF-8, you need to use the second argument in the call.            

0 commentaires

0
votes

avec un dictionnaire simple comme {b'inner_key ': b'inner_value'} code> Vous pouvez faire quelque chose comme ceci:

for k, v in list(d.items()):
    d[k.decode('utf8')] = d.pop(k).decode('utf8')


0 commentaires

0
votes

J'ai fini par faire

def _convert_bytes_dict(data):
    out = {}
    for key, val in data.items():
        if isinstance(val, list):
            decoded_val = [_convert_bytes_dict(i) for i in val]
        elif not hasattr(val, "items") and not hasattr(val, "decode"):
            decoded_val = val
        elif not hasattr(val, "items"):
            decoded_val = val.decode("utf-8")
        else:
            decoded_val = _convert_bytes_dict(val)
        out[key.decode("utf-8")] = decoded_val
    return out


0 commentaires