1. ホーム
  2. python

[解決済み] セミコロンで区切られた文字列を辞書に分割する (Python)

2023-06-05 22:41:23

質問

次のような文字列があります。

"Name1=Value1;Name2=Value2;Name3=Value3"

Pythonの組み込みクラス/関数で、その文字列を受け取って、まるで私がこれをやったかのように辞書を構築するものはないでしょうか。

dict = {
    "Name1": "Value1",
    "Name2": "Value2",
    "Name3": "Value3"
}

利用可能なモジュールに目を通しましたが、一致するものが見つからないようです。


ありがとうございます。関連するコードを自分で作成する方法を知っていますが、そのような小規模なソリューションは通常、地雷が発生するのを待っています (たとえば、誰かが Name1='Value1=2'; と書くなど) ので、通常は事前にテストされた関数を好みます。

それなら自分でやります。

どのように解決するのですか?

ビルトインはありませんが、ジェネレータの内包でかなり簡単に実現できます。

s= "Name1=Value1;Name2=Value2;Name3=Value3"
dict(item.split("=") for item in s.split(";"))

[編集]をクリックします。 あなたの更新から、あなたはクォートを処理する必要があるかもしれないことを示しました。 これは、あなたが探している正確なフォーマットが何であるか(どの引用文字が受け入れられるか、どのエスケープ文字か等)によって、物事を複雑にしています。 csvモジュールがあなたのフォーマットをカバーできるかどうか見てみるとよいでしょう。 CSVは一連のレコードを繰り返し処理するように設計されているので、最初の行を見るために.next()を呼び出しているのです。 あなたのニーズに合わせて調整してください)。

>>> s = "Name1='Value=2';Name2=Value2;Name3=Value3"

>>> dict(csv.reader([item], delimiter='=', quotechar="'").next() 
         for item in csv.reader([s], delimiter=';', quotechar="'").next())

{'Name2': 'Value2', 'Name3': 'Value3', 'Name1': 'Value1=2'}

フォーマットの正確な構造によっては、独自の簡単なパーサーを書く必要があるかもしれません。