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

Pythonでリスト形式の文字列を辞書に変換する方法

Pythonでは、リストのように見える文字列を扱う場面があります。さらに、その要素が「キーと値」のペアを表している場合、辞書(dict)として扱いたくなることもあるでしょう。本記事では、このようなリスト形式の文字列を辞書へ変換する方法を、具体的なコード例とともに解説します。

split関数とスライスを使う方法

まず紹介するのは、split関数で要素をキーと値に分割し、スライスで角括弧を取り除きながら辞書内包表記で変換する方法です。文字列の先頭と末尾にある「[」「]」を[1:-1]のスライスで除外し、「, 」(カンマ+スペース)で分割した各要素をさらに「:」で区切ることで、キーと値のペアを作成します。

サンプルコード

stringA = '[Mon:3, Tue:5, Fri:11]'
# 対象の文字列
print("Given string : \n",stringA)
# 型の確認
print(type(stringA))
# splitを使用して変換
res = {sub.split(":")[0]: sub.split(":")[1] for sub in stringA[1:-1].split(", ")}
# 結果の出力
print("The converted dictionary : \n",res)
# 型の確認
print(type(res))

実行結果

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

('Given string : \n', '[Mon:3, Tue:5, Fri:11]')

('The converted dictionary : \n', {'Fri': '11', 'Mon': '3', 'Tue': '5'})

eval関数とreplaceメソッドを使う方法

次に、eval関数を使う方法です。replaceメソッドで文字列中の角括弧「[]」を波括弧「{}」に置き換えることで、文字列全体が辞書リテラルの形式になります。その状態でeval関数を実行すると、実際の辞書オブジェクトとして評価されます。なお、evalは任意のコードを実行できてしまうため、信頼できない入力に対して使用するのは避けてください。

サンプルコード

stringA = '[18:3, 21:5, 34:11]'
# 対象の文字列
print("Given string : \n",stringA)
# 型の確認
print(type(stringA))
# evalを使用して変換
res = eval(stringA.replace("[", "{").replace("]", "}"))
# 結果の出力
print("The converted dictionary : \n",res)
# 型の確認
print(type(res))

実行結果

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

('Given string : \n', '[18:3, 21:5, 34:11]')

('The converted dictionary : \n', {18: 3, 34: 11, 21: 5})

まとめ

split+スライスによる方法は安全ですが、すべての値が文字列として格納される点に注意が必要です。一方、evalを使う方法は数値など元の型が保持される反面、セキュリティ上のリスクを伴うため、入力元が信頼できる場合に限定して使用しましょう。用途やデータの性質に応じて、適切な変換方法を選択することが重要です。

  1. 【Python入門】リスト・タプル・辞書の違いを徹底解説

    Pythonの3大コレクション:リスト、タプル、辞書 Pythonには複数のデータをまとめて扱うためのコレクション型が用意されています。中でもよく使われるのがリスト(list)、タプル(tuple)、辞書(dict)の3つです。それぞれ特徴が異なるため、用途に応じて使い分けることが重要です。 基本的な違いの概要 リストとタプルはシーケンス(順序付き)オブジェクトであり、要素を順番に並べて管理します。一方、辞書はキーと値のペアを格納するハッシュテーブル構造です。 リストとタプルは「順序を持つコレクション」ですが、辞書は「順序を持たないコレクション」として扱われます。 リストと辞書はミュータブ

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

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