Python字典:删除你的字符

时间:2011-11-12 00:56:10

标签: python mongodb

如何从以下字典中删除 u 字符?

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

此数据来自Mongo Database find()查询

所以它看起来像

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

7 个答案:

答案 0 :(得分:45)

某些数据库(如Sqlite3)允许您定义converteradapter函数,因此您可以将文本检索为 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}

答案 1 :(得分:18)

您看到的u字符只是意味着它们是unicode字符串。

如果您不希望它们是unicode,您可以将它们编码为其他内容,例如ASCII。

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

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

答案 2 :(得分:5)

如果您只是想将dict转换为json数据字符串,您可以这样做:

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

答案 3 :(得分:3)

您需要让psycopg2对您的字符串进行编码,而不是尝试将Python语法字符串插入到您的查询中 - 如果某些字符串包含SQL将解释为结束的字符,那么您将面临SQL注入问题的危险串。您应该将参数传递给psycopg2,如下所示:

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

因为psycopg2非常非常了解SQL语法,所以当它获取uname字符串和引号时,它将保留town个字符并完全以与这个SQL语句需要。

答案 4 :(得分:2)

正如sven在他的评论中提到的,u表示mongodb中表示的类型(实际上是因为json被定义为使用unicode)。

这个事实对您来说应该是完全透明的,事实上您可以在词典中互换使用strunicode值。

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

答案 5 :(得分:0)

你不能简单地从字符串中删除u,因为它象征着字符串是Unicode。

一种解决方案是使用编码功能:

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字符。

答案 6 :(得分:0)

类似于已经发布的内容,但是使用json库。

>>> import json
>>> udata = {u'name': u'A', u'primary_key': 1}
>>> json.dumps(udata)
'{"name": "A", "primary_key": 1}'