我有一个像这样的字节类型对象:
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
答案 0 :(得分:7)
我认为还需要解码才能获得正确的格言。
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}
答案 1 :(得分:0)
您所需要的只是ast.literal_eval
。没有比这更好的了。除非你在字符串中专门使用非Python dict语法,否则没有理由搞乱JSON。
import ast
ast.literal_eval(b"{'one': 1, 'two': 2}")
print(repr(d))
请参阅回答here。它还详细说明了ast.literal_eval
比eval
更安全的方式。
答案 2 :(得分:0)
您可以使用Base64库将字符串字典转换为字节,尽管您可以使用json库将字节结果转换为字典。请尝试以下示例代码。
import base64
import json
input_dict = {'var1' : 0, 'var2' : 'some string', 'var1' : ['listitem1','listitem2',5]}
message = str(input_dict)
ascii_message = message.encode('ascii')
output_byte = base64.b64encode(ascii_message)
msg_bytes = base64.b64decode(output_byte)
ascii_msg = msg_bytes.decode('ascii')
# Json library convert stirng dictionary to real dictionary type.
# Double quotes is standard format for json
ascii_msg = ascii_msg.replace("'", "\"")
output_dict = json.loads(ascii_msg) # convert string dictionary to dict format
# Show the input and output
print("input_dict:", input_dict, type(input_dict))
print()
print("base64:", output_byte, type(output_byte))
print()
print("output_dict:", output_dict, type(output_dict))
答案 3 :(得分:-1)