Recibo un dictado de una "capa" de código sobre el cual se realizan algunos cálculos / modificaciones antes de pasarlo a otra "capa". Las claves y los valores de "cadena" del unicode
dictado original lo son , pero la capa a la que se pasan solo acepta str
.
Esto se llamará a menudo, así que me gustaría saber cuál sería la forma más rápida de convertir algo como:
{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }
...a:
{ 'spam': 'eggs', 'foo': True, 'bar': { 'baz': 97 } }
... teniendo en cuenta que los valores que no son de "cadena" deben permanecer como su tipo original.
¿Alguna idea?
type(data)(map(convert, data))
lugarmap(convert, data)
?Sé que llego tarde en este:
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())
fuente
str
a un intSi desea hacer esto en línea y no necesita un descenso recursivo, esto podría funcionar:
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 } }"
fuente
{ str(key):value for key,value in data.items() }
para un dict no anidado (dado que el título no menciona ese caso, podría ser interesante para otras personas)
{str(k): str(v) for k, v in my_dict.items()}
fuente
def to_str(key, value): if isinstance(key, unicode): key = str(key) if isinstance(value, unicode): value = str(value) return key, value
pasarle la clave y el valor, y agregar recursividad a su código para dar cuenta del diccionario interno.
fuente
Para hacerlo todo en línea (no recursivo):
{str(k):(str(v) if isinstance(v, unicode) else v) for k,v in my_dict.items()}
fuente
Solo usa
print(*(dict.keys()))
El * se puede utilizar para desempacar contenedores, por ejemplo, listas. Para obtener más información sobre *, consulte esta respuesta SO .
fuente
>>> 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'}
fuente