3

セパレータを使用して各要素を分割することにより、辞書に変換したい文字列のタプルがあります。これは辞書の理解で可能ですか?

>>> x = ('var1=abc', 'var2=xyz', 'var3=10')
>>> y = {k: v for (k, v) in ???}  # this is where I need your help
>>> print y
{ "var1": "abc", "var2": "xyz", "var3": "10" }

これは何よりも学習演習です-ですから、別の方法で答えないでください(私はそれらをたくさん持っています)-辞書の理解でそれが可能かどうか知りたいです。

[アップデート]

最初に書き留めなかったわずかな変更があります。各値の末尾から無関係な改行文字を削除する必要があります。

>>> x = ('var1=abc\n', 'var2=xyz\n', 'var3=10')
>>> d = {k: v.strip('\n') for (k, v) in [e.split('=') for e in x]}
>>> d
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'}

(もちろん、今は同じ順序ではありませんが、私はそれと一緒に暮らすことができます。Grrr。)

4

3 に答える 3

5

各文字列を 2 回分割する必要がありますが、それは可能です。

{elem.split('=', 1)[0]: elem.split('=', 1)[1].strip() for elem in x} 

結果:

>>> x = ('var1=abc\n', 'var2=xyz\n', 'var3=10')
>>> {elem.split('=', 1)[0]: elem.split('=', 1)[1].strip() for elem in x} 
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'}

2 回の分割を回避するには、dict()代わりにジェネレーター式とコンストラクターを使用します。

dict(elem.strip().split('=', 1) for elem in x)

2 つの値のタプルのシーケンスを取るためです。

于 2013-03-04T16:40:16.387 に答える
4

dict()コンストラクターの使用

dict(elem.split('=', 1) for elem in x)

実際に:

>>> x = ('var1=abc', 'var2=xyz', 'var3=10')
>>> dict(elem.split('=', 1) for elem in x)
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'}

注:辞書はソートされていないため、希望どおりの結果が得られません。

于 2013-03-04T16:42:50.390 に答える
1
>>> x = ('var1=abc', 'var2=xyz', 'var3=10')
>>> dict([element.split('=') for element in x])
{'var1': 'abc', 'var3': '10', 'var2': 'xyz'}
于 2013-03-04T16:41:59.033 に答える