Ich erhalte ein Diktat von einer "Codeebene", für das einige Berechnungen / Änderungen durchgeführt werden, bevor es an eine andere "Ebene" übergeben wird. Die Schlüssel- und Zeichenfolgenwerte des ursprünglichen Diktats sind unicode
, aber die Ebene, auf die sie übergeben werden, akzeptiert nur str
.
Dies wird häufig aufgerufen, daher möchte ich wissen, wie Sie am schnellsten Folgendes konvertieren können:
{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }
...zu:
{ 'spam': 'eggs', 'foo': True, 'bar': { 'baz': 97 } }
... unter Berücksichtigung der Nicht-String-Werte muss der ursprüngliche Typ beibehalten werden.
Irgendwelche Gedanken?
type(data)(map(convert, data))
stattdessenmap(convert, data)
?Ich weiß, dass ich zu spät komme:
def convert_keys_to_string(dictionary): """Recursively converts dictionary keys to strings.""" if not isinstance(dictionary, dict): return dictionary return dict((str(k), convert_keys_to_string(v)) for k, v in dictionary.items())
quelle
str
einen intWenn Sie dies inline tun wollten und keinen rekursiven Abstieg benötigten, könnte dies funktionieren:
DATA = { u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } } print DATA # "{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }" STRING_DATA = dict([(str(k), v) for k, v in data.items()]) print STRING_DATA # "{ 'spam': 'eggs', 'foo': True, 'bar': { u'baz': 97 } }"
quelle
{ str(key):value for key,value in data.items() }
für ein nicht verschachteltes Diktat (da der Titel diesen Fall nicht erwähnt, könnte es für andere Personen interessant sein)
{str(k): str(v) for k, v in my_dict.items()}
quelle
def to_str(key, value): if isinstance(key, unicode): key = str(key) if isinstance(value, unicode): value = str(value) return key, value
Übergeben Sie den Schlüssel und den Wert und fügen Sie Ihrem Code eine Rekursion hinzu, um das innere Wörterbuch zu berücksichtigen.
quelle
Um alles inline zu machen (nicht rekursiv):
{str(k):(str(v) if isinstance(v, unicode) else v) for k,v in my_dict.items()}
quelle
Benutz einfach
print(*(dict.keys()))
Das * kann zum Auspacken von Containern verwendet werden, z. B. Listen. Weitere Informationen zu * finden Sie in dieser SO-Antwort .
quelle
>>> d = {u"a": u"b", u"c": u"d"} >>> d {u'a': u'b', u'c': u'd'} >>> import json >>> import yaml >>> d = {u"a": u"b", u"c": u"d"} >>> yaml.safe_load(json.dumps(d)) {'a': 'b', 'c': 'd'}
quelle