2016-10-14 28 views
0

にdictsに割り当ての文字列を変換する - 彼らは、割り当てコマンドです:私は以下の文字列を持っているのPython

lnodenum = 134241 
d1 = 0.200000 
jobname = 'hcalfzp' 

は、辞書のキーと値に、変数と値を含む、この文字列を変換するが方法です。 ?これは、以下のコマンドを実行するのと同じことだ:

my_str = """lnodenum = 134241 
      d1 = 0.200000 
      jobname = 'hcalfzp' """ 
exec('my_dict = dict(%s)' % ','.join(my_str.split('\n'))) 

ない、誰もがより簡潔な方法を考えるかどうかを確認します。私は、これはそれを行うための一つの方法だと思い

my_dict = dict(lnodenum = 134241, d1 = 0.200000, jobname = 'hcalfzp') 

注:私は科学計算のために私自身のコードを使用していますので、悪意のある入力データのような安全性の心配はありません。しかし、私は短いと読みやすいコードを持っていることを好む:)

答えて

2

execの必要はありません。 dict機能を持つ通常の割り当てを使用するだけです。

my_str = """lnodenum = 134241 
      d1 = 0.200000 
      jobname = 'hcalfzp' """ 
my_dict = dict(pair for pair in (line.strip().split(' = ') for line in my_str.splitlines())) 

結果:

>>> my_dict 
{'d1': '0.200000', 'lnodenum': '134241', 'jobname': "'hcalfzp'"} 

または、あなたは、各オブジェクトを解析し理解してast.literal_evalを使用したい場合:

import ast 
my_dict = {k:ast.literal_eval(v) for k,v in (line.strip().split(' = ') for line in my_str.splitlines())} 

結果:

>>> my_dict 
{'d1': 0.2, 'lnodenum': 134241, 'jobname': 'hcalfzp'} 
+0

感謝あなたのコメントのためにあなた!しかし、これの欠点は整数と浮動小数点が文字列になります。 –

+0

@ YuxiangWang - 良い点。編集を参照してください。 – TigerhawkT3

+0

美しい!どうもありがとうございます。 –

関連する問題