Eine Möglichkeit (unter der Annahme, Python 2) könnte:
def encode_dict(d, codec='utf8'):
ks = d.keys()
for k in ks:
val = d.pop(k)
if isinstance(val, unicode):
val = val.encode(codec)
elif isinstance(val, dict):
val = encode_dict(val, codec)
if isinstance(k, unicode):
k = k.encode(codec)
d[k] = val
return d
top_d = encode_dict(top_d)
Sie müssen jeden Unicode-Schlüssel k
(über .pop
) entfernen und ihn dann (nach dem Codieren) wieder einfügen (mit dem neu codierten Code val
)in eine Byte-Zeichenfolge, andernfalls (da für Schlüssel, die nur aus ASCII-Zeichen bestehen, k == k.encode('utf-8')
der Fall ist), würde der Unicode-Schlüssel erhalten bleiben. Versuchen Sie das mit d.get
anstelle von d.pop
- es tut nicht, was Sie fragen.
Ob Sie eigentlich brauchen was Sie fragen ist eigentlich ziemlich zweifelhaft; Wenn alle Unicode-Zeichenfolgen in d
(und darin eingebetteten Zeichen) nur aus ASCII-Zeichen bestehen, dann d == encode_dict(d)
. Allerdings würden die "stringifizierten" Formen tatsächlich kosmetisch anders aussehen, und ich denke, das könnte das sein, wonach Sie suchen.
'u' bezeichnet seine Unicode-Zeichenfolge. Du willst es entfernen ?? – Hackaholic
Ich glaube nicht, dass du es kannst. Es zeigt an, dass die Zeichenfolge als Unicode dargestellt wird und somit kein Teil der Zeichenfolge ist. Btw in 'Python 3.x' gibt es Standard-Unicode-Unterstützung, so dass das' U' Präfix nicht verwendet wird. – VHarisop
Ich vergleiche es mit anderen Daten, die nicht drin sind. – user3738426