如何从python中的Dictionary数据中删除unicode字符

时间:2016-06-28 11:09:40

标签: python json unicode

使用请求库后,我在response.json()

下面的dict
{u'xyz': {u'key1': None, u'key2': u'Value2'}}

我想删除所有unicode字符并仅打印没有unicode字符的键值对

我已经尝试过以下方法删除,但它显示格式错误的字符串

>>> import json, ast
>>> c = {u'xyz': {u'key1': None,u'key2': u'Value2'}}
>>> ast.literal_eval(json.dumps(c))

获取' ValueError:格式错误的字符串'

有关如何做的任何建议吗?

4 个答案:

答案 0 :(得分:3)

将您的无更改为'无':

 c = {u'xyz': {u'key1': 'None', u'key2': u'Value2'}}

这是一个投射问题 - 非常喜欢str的

另外,也许你想要将所有None改为空str或'None'str ... 看到这个帖子: Python: most idiomatic way to convert None to empty string? 使用此代码,我将空字符串更改为“无”:

def xstr(s):
    if s is None:
        return 'None'
    return str(s)

答案 1 :(得分:1)

您可以使用unicodestring.encode("ascii","replace")

>>> ustr=u'apple'
>>> ustr
u'apple'
>>> astr=ustr.encode("ascii","replace")
>>> astr
'apple'

答案 2 :(得分:1)

此代码段将帮助您保留没有Unicode前缀表示法u的数据:

>>> import json
>>> c = {u'xyz': {u'key1': u'Value1',u'key2': u'Value2'}}
>>> print c
{u'xyz': {u'key2': u'Value2', u'key1': u'Value1'}}
>>> d = eval(json.dumps(c))
>>> print d
{'xyz': {'key2': 'Value2', 'key1': 'Value1'}}

json.dumps()将字典转换为字符串类型,而eval()将其转换为字符串类型。

注意:出于测试目的,key1值已从“无”更改为“ value1”

答案 3 :(得分:0)

我真的不明白你为什么要这样。你的变量是一个普通的Python字典,带有普通的Unicode字符串,它们碰巧打印成u'',以区别于字节串,但这对于使用它们无关紧要。

如果你想将它们保存为字符串以便以后将它们作为数据读取,那么JSON就是一种很好的格式。所以根本不需要调用请求的.json()函数,只需使用响应的.text属性 - 毕竟它已经是JSON了。

你的尝试

>>> ast.literal_eval(json.dumps(c))

失败是因为您首先将c再次转换为JSON,然后尝试将其解析为Python文字。这不起作用,因为Python不是JSON;特别是一个有null而另一个有None

所以也许你想把Unicode字符串改成字节串?就像将它们编码为UTF8一样,这可能有效:

def to_utf8(d):
    if type(d) is dict:
        result = {}
        for key, value in d.items():
            result[to_utf8(key)] = to_utf8(value)
    elif type(d) is unicode:
        return d.encode('utf8')
    else:
        return d

或类似的东西,但我不知道你为什么需要它。