如何解析包含dict的python b'字符串

时间:2015-09-11 12:17:01

标签: python

当我从 python3 脚本中查询 hgetall redis 时,我得到了以下声明的输出。

data = {
    b'category': b'0',
    b'title': b'1',
    b'display': b'1,2',
    b'type': b'1',
    b'secret': b'this_is_a_salt_key',
    b'client': b'5'}

类型为 dict

当我试图获得“类别”时

>>> data['category']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'category'

读完后我试过这种方式

import ast
>>> ast.literal_eval(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/ast.py", line 84, in literal_eval
    return _convert(node_or_string)
  File "/usr/lib/python3.4/ast.py", line 83, in _convert
    raise ValueError('malformed node or string: ' + repr(node))
ValueError: malformed node or string: {b'category': b'0', b'title': b'1', b'display': b'1,2', b'type': b'1', b'secret': b'this_is_a_salt_key', b'client': b'5'}

也尝试过使用json.dumps。但无法理解真正的问题。

请帮我解析输出并获得所需的结果。

3 个答案:

答案 0 :(得分:7)

这不是JSON,所以没有必要尝试解析它。它是一个字典,恰好有字节字符串的键。因此,您只需使用字节字符串来访问值:

data[b'category']

答案 1 :(得分:2)

您必须在键值前面添加b,因为它是一个字节字符串:

data[b'category']

如果您想将字节字符串转换为普通字符串,您可以这样做:

data = {b'category': b'0', b'title': b'1', b'display': b'1,2', b'type': b'1', b'secret': b'this_is_a_salt_key', b'client': b'5'}

newData = {str(key): str(value) for (key, value) in data.items()}

print newData

答案 2 :(得分:1)

 data = {key.decode('utf-8'): value.decode('utf-8') for (key, value) in c.items()}
 >>> data
 {'category': '0', 'title': '1', 'display': '1,2', 'type': '1', 'secret': 'this_is_a_salt_key', 'client': '5'}
>>> data['display']
'1,2'
>>> data['display'].split(",")
['1', '2']

这是我想要的输出..感谢所有人。