2016-10-14 28 views
0

我有以下字符串 - 他們是分配命令:轉換分配的字符串類型的字典在Python

lnodenum = 134241 
d1 = 0.200000 
jobname = 'hcalfzp' 

有沒有辦法來這個字符串轉換,包含變量和值,以字典的鍵和值?這將會是相當於執行下面的命令:

my_dict = dict(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'))) 

不知道是否有人會想到一個更簡潔的方式?

注意:我使用我自己的代碼進行科學計算,所以我不介意讓代碼出現安全問題,如惡意輸入數據。但是,我更喜歡讓代碼更短,更容易閱讀:)

回答

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

美麗!非常感謝。 –