Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでバイト文字列のキーと値を持つ辞書を通常の文字列に変換する方法

Pythonにおけるバイト文字列(bytes)とは、先頭に「b」が付いた形式で表される文字列のことです。本記事では、バイト文字列をキーや値として持つ辞書を、通常の文字列だけで構成された辞書へ変換する方法を解説します。

decode()とasciiを使った変換方法

Pythonの文字列メソッドであるdecode()は、指定したエンコーディングに登録されているコーデックを使用して文字列をデコードします。デフォルトでは標準の文字列エンコーディングが適用されます。ここでは、decode()関数の引数に「ascii」を渡すことで、バイト文字列の値を通常のASCII文字列へと変換しています。

コード例

bstring = {b'day': b'Tue', b'time': b'2 pm', b'subject': b'Graphs'}
print(bstring)
# decodeを使用して変換
stringA = {y.decode('ascii'): bstring.get(y).decode('ascii') for y in bstring.keys()}
# 結果を出力
print(stringA)

実行結果

上記のコードを実行すると、以下のような結果が得られます。

{'subject': 'Graphs', 'day': 'Tue', 'time': '2 pm'}
{u'time': u'2 pm', u'day': u'Tue', u'subject': u'Graphs'}

この例では、辞書内包表記を使って各キーに対してdecode('ascii')を適用し、対応する値も同様にデコードすることで、新しい辞書を作成しています。簡潔でPythonらしい書き方と言えるでしょう。

decode()とutf-8を使った変換方法

先ほどと同様のアプローチを取りますが、今回はエンコーディングとして「utf-8」を使用します。forループでキーと値のペアを順番に取り出し、それぞれをutf-8表現の文字列へと変換していきます。

コード例

bstring = {b'day': b'Tue', b'time': b'2 pm', b'subject': b'Graphs'}
print(bstring)
# decodeを使用して変換
stringA = {}
for key, value in bstring.items():
    stringA[key.decode("utf-8")] = value.decode("utf-8")
# 結果を出力
print(stringA)

実行結果

上記のコードを実行すると、以下のような結果が得られます。

{'subject': 'Graphs', 'day': 'Tue', 'time': '2 pm'}
{u'time': u'2 pm', u'day': u'Tue', u'subject': u'Graphs'}

この方法では、items()メソッドでキーと値のペアを取得し、空の辞書stringAに対してデコード済みのキーと値を順次追加していきます。日本語などマルチバイト文字を扱う可能性がある場合は、asciiよりもutf-8を指定する方が安全です。

まとめ

バイト文字列の辞書を通常の文字列の辞書に変換するには、decode()メソッドを使用します。辞書内包表記を使えば簡潔に、forループを使えば処理の流れが分かりやすく記述できます。用途や扱う文字セットに応じて、asciiまたはutf-8を選択するとよいでしょう。

  1. Pythonで文字列を辞書(dict)に変換する方法|ast.literal_evalとjson.loadsの使い分け

    Pythonでは、文字列形式で表現された辞書データを実際のdictオブジェクトに変換したい場面がよくあります。主な方法としては、標準ライブラリの ast.literal_eval() を使う方法と、json モジュールを使う方法の2つがあります。それぞれの特徴と使い方を詳しく見ていきましょう。 方法1:ast.literal_eval() を使う ast.literal_eval() は、文字列をPythonの式として安全に評価する関数です。任意のコードを実行できてしまう eval() とは異なり、リテラル構造以外は評価しないため、セキュリティ面でも安心して利用できます。 評価できるのは、文

  2. 【Python】辞書形式の文字列をdict型に変換する2つの安全な方法

    はじめにPythonでは、文字列として表現された辞書(例:{foo: bar})を、実際の辞書(dict型)オブジェクトに変換したい場面がよくあります。この記事では、代表的な2つの変換方法である ast.literal_eval() と json.loads() の使い方を解説します。方法1: ast.literal_eval() を使うast.literal_eval() を使うと、文字列をPythonの式として安全に評価できます。この関数は、式ノードまたはPython式を含む文字列を評価しますが、許可されているのは文字列・数値・タプル・リスト・辞書・ブール値・Noneといったリテラル構造の