如何将字节类型转换为字典
如何将字节类型转换为字典
这个问题已经有了答案:
我有一个像这样的bytes类型的对象:
b"{'one': 1, 'two': 2}"
我需要使用Python代码从中获取字典。我按以下方式将它转换为字符串,然后转换为字典。
string = dictn.decode("utf-8") print(type(string)) >> <class 'str'> d = dict(toks.split(":") for toks in string.split(",") if toks)
但我得到了以下错误:
------> d = dict(toks.split(":") for toks in string.split(",") if toks) TypeError: 'bytes' object is not callable
admin 更改状态以发布 2023年5月21日
你所需要的只是 ast.literal_eval
。没必要使用 JSON,除非你的字符串是使用非 Python 字典语法。
# python3 import ast byte_str = b"{'one': 1, 'two': 2}" dict_str = byte_str.decode("UTF-8") mydata = ast.literal_eval(dict_str) print(repr(mydata))
可以在此处查看答案。它还详细说明了 ast.literal_eval
比 eval
更安全。
我认为还需要解码才能得到一个合适的字典。
a= b"{'one': 1, 'two': 2}" ast.literal_eval(a.decode('utf-8')) **Output:** {'one': 1, 'two': 2}
接受的答案产生了
a= b"{'one': 1, 'two': 2}" ast.literal_eval(repr(a)) **output:** b"{'one': 1, 'two': 2}"
literal_eval 对我很多代码并没有做好,所以我个人更喜欢使用 json 模块。
import json a= b"{'one': 1, 'two': 2}" json.loads(a.decode('utf-8')) **Output:** {'one': 1, 'two': 2}