Python字典:去除u'字符
我该如何从下面这个字典中去掉u字符呢?
{u'name': u'A', u'primary_key': 1}
这些数据是通过Mongo数据库
的find()查询得到的。
所以它看起来像这样:
{'name': 'A', 'primary_key': 1}
7 个回答
7
如果你只是想把字典(dict)转换成 JSON 数据字符串,你可以这样做:
>>> from bson.json_util import dumps
>>> data = {u'name': u'A', u'primary_key': 1}
>>> dumps(data)
'{"name": "A", "primary_key": 1}'
22
你看到的 u
字符其实是表示这些字符串是 Unicode 格式的。
如果你不想让它们是 Unicode 格式的,可以把它们转换成其他格式,比如 ASCII。
>>> s = u'hi!'
>>> s
u'hi'
>>> s2 = s.encode('ascii')
>>> s2
'hi'
56
一些数据库,比如 Sqlite3,允许你定义 转换器 和 适配器 函数,这样你就可以把文本以 str 的形式获取,而不是 unicode。可惜的是,MongoDB 对于常用的数据类型,比如 str、decimal 或 datetime,并没有提供这样的选项:
- http://api.mongodb.org/python/current/tutorial.html#a-note-on-unicode-strings
- http://api.mongodb.org/python/current/faq.html#how-can-i-store-decimal-decimal-instances
- http://api.mongodb.org/python/current/faq.html#how-can-i-save-a-datetime-date-instance
既然 MongoDB 没有这些选项,那就只能写 Python 代码在获取数据后进行转换。你可以写一个递归函数,遍历结果来转换每个字段。
作为一个快速且简单的替代方案,这里有一个小技巧,可能会对你有帮助:
>>> import json, ast
>>> r = {u'name': u'A', u'primary_key': 1}
>>> ast.literal_eval(json.dumps(r))
{'name': 'A', 'primary_key': 1}