Diccionario de Python: eliminando los caracteres

¿Cómo elimino u caracteres del siguiente diccionario?

{u'name': u'A', u'primary_key': 1} 

Estos datos provienen de la consulta de Mongo Database datos de Mongo Database find ()

para que se vea como

 {'name': 'A', 'primary_key': 1} 

Algunas bases de datos, como Sqlite3, le permiten definir las funciones de convertidor y adaptador para que pueda recuperar texto como str en lugar de Unicode . Desafortunadamente, MongoDB no proporciona esta opción para ninguno de los tipos comúnmente necesarios, como str, decimal o datetime:

Habiendo eliminado las opciones de Mongo, eso deja la escritura del código Python para hacer la conversión después de recuperar los datos. Podría escribir una función recursiva que atraviese el resultado para convertir cada campo.

Como una alternativa rápida y sucia, aquí hay un pequeño truco que puede ser de utilidad:

 >>> import json, ast >>> r = {u'name': u'A', u'primary_key': 1} >>> ast.literal_eval(json.dumps(r)) {'name': 'A', 'primary_key': 1} 

Los caracteres u que está viendo simplemente significan que son cadenas Unicode.

Si no desea que sean unicode, puede codificarlos como otra cosa, como ASCII.

 >>> s = u'hi!' >>> s u'hi' >>> s2 = s.encode('ascii') >>> s2 'hi' 

Si simplemente desea convertir la cadena de datos dict a json, puede hacerlo:

 >>> from bson.json_util import dumps >>> data = {u'name': u'A', u'primary_key': 1} >>> dumps(data) '{"name": "A", "primary_key": 1}' 

Debe permitir que psycopg2 codifique sus cadenas, no intente insertar cadenas de syntax de Python en sus consultas en bruto: se está poniendo en peligro de un problema de inyección de SQL si algunas de las cadenas contienen caracteres que SQL interpretará como el final de la cadena. Deberías pasarle parámetros a psycopg2 así:

 cursor.execute('INSERT INTO person (name, town) VALUES (%s %s)', (name, town)) 

Debido a que psycopg2 conoce muy bien la syntax SQL, dejará de lado los caracteres u medida que obtiene su name y cadenas de town y citas, y las escapa exactamente de la manera que esta statement SQL necesita.

Como sven menciona en su comentario, la u es una indicación de los tipos representados en mongodb (en realidad es porque json está definido para usar unicode).

Este hecho debería ser totalmente transparente para usted, de hecho, puede usar los valores de str y unicode intercambiable en los dictados.

 >>> 'foo' in {u'foo': 5} True >>> {u'foo': 5}['foo'] 5 >>> 

No puede simplemente quitar la u de las cadenas, ya que simboliza, que las cadenas están en Unicode.

Una solución es usar la función de encoding:

 old_strings = {u'name':u'A', u'primary_key':1} newstrings = {} for k in old_strings.keys(): newtsrings[k] = old_strings[k].encode('ascii','ignore') 

Esto simplemente ignoraría los caracteres no ascii.