Подтвердить что ты не робот

Словарь Python: удаление символов u

Как удалить символы u из следующего словаря?

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

Эти данные поступают из запроса Mongo Database find()

чтобы он выглядел как

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

Ответ 1

Некоторые базы данных, такие как Sqlite3, позволяют вам определять converter и adapter, чтобы вы могли извлекать текст как str, а не unicode. К сожалению, MongoDB не предоставляет этот параметр для любого из обычно требуемых типов, таких как str, decimal или datetime:

Исключив опции Mongo, которые оставляют писать код Python для преобразования после получения данных. Вы можете написать рекурсивную функцию, которая пересекает результат для преобразования каждого поля.

Как быстрая и грязная альтернатива, вот небольшой взлом, который может быть полезен:

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

Ответ 2

Символы u, которые вы видите, просто означают, что они являются строками Unicode.

Если вы не хотите, чтобы они были юникодом, вы можете кодировать их как нечто другое, например ASCII.

>>> s = u'hi!'
>>> s
u'hi'

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

Ответ 3

Вы должны позволить psycopg2 кодировать ваши строки, а не пытаться вставлять строки синтаксиса Python в ваши сырые запросы - вы подвергаете себя опасности проблемы с SQL-инъекцией, если некоторые строки содержат символы, которые SQL интерпретирует как завершающие строка. Вы должны передать параметры psycopg2 следующим образом:

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

Поскольку psycopg2 очень хорошо знает синтаксис SQL, он не будет содержать символов u, поскольку он получает строки и кавычки name и town и ускоряет их в точности так, как это требуется для SQL-запроса.

Ответ 4

Если вы просто хотите преобразовать строку данных dict в json, вы можете сделать:

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

Ответ 5

Как упоминает sven в своем комментарии, u является индикатором типов, представленных в mongodb (на самом деле это потому, что json определен для использования unicode).

Этот факт должен быть полностью прозрачным для вас, на самом деле вы можете использовать значения str и unicode взаимозаменяемо в dicts.

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

Ответ 6

Вы не можете просто удалить u из строк, поскольку он символизирует, что строки находятся в Юникоде.

Одним из решений является использование функции кодирования:

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')

Это просто игнорирует символы без ascii.