web-dev-qa-db-ja.com

バイト型を辞書に変換する方法は?

次のようなバイト型オブジェクトがあります。

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
7
Harathi

あなたに必要なのは ast.literal_eval。それ以上に素晴らしいものはありません。文字列でPython以外のdict構文を具体的に使用していない限り、JSONを台無しにする理由はありません。

import ast
ast.literal_eval(b"{'one': 1, 'two': 2}")
print(repr(d))

回答を参照してください こちらast.literal_evalevalより安全です。

2
mattmc3

適切な辞書を取得するにはデコードも必要だと思います。

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}
18
H S Rathore

あなたはこのように試すことができます:

import json
import ast

a= b"{'one': 1, 'two': 2}"
print(json.loads(a.decode("utf-8").replace("'",'"')))

print(ast.literal_eval(a.decode("utf-8")))

モジュールのドキュメントがあります:

1 . ast doc

2 . json doc

1
William Feirie