当我从 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。但无法理解真正的问题。
请帮我解析输出并获得所需的结果。
答案 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']
这是我想要的输出..感谢所有人。