2012-07-23 75 views
2

我有蟒蛇像這樣的項目清單: 輸入:如何將項目列表轉換爲python中的變量?

a=['nt','mt','pt'] 

我想使每個項目在上面的列表作爲一個變量,然後將該變量分配給涉及該變量正則表達式。

輸出: 我想是這樣的:

nt=re.compile("%s=[a-z]+&" %nt) 
mt=re.compile("%s=[a-z]+&" %mt) 
pt=re.compile("%s=[a-z]+&" %pt) 

我如何去這樣做??? 謝謝。 [對不起並未對以儘可能最好的方式問題]

回答

13

Keep data out of your variable names.不要使用變量,使用字典:

d = {name: re.compile("%s=[a-z]+&" % name) for name in a} 
+1

如果使用Python 2.6或更早的版本:'d = dict((name,re.compile(「%s = [az] +&」%name)a)' – cdhowie 2012-07-23 16:56:29

+0

那麼如果我以後想要在字符串上使用上面指定的正則表達式? – abhixec 2012-07-23 16:59:59

+0

@abhinav:簡單地從字典中檢索它:'d [「nt」]'等 – 2012-07-23 17:00:38

1

毫無疑問最好使用字典鍵,不變量。但是Python變量中的FYI實際上存儲在字典中,您可以通過調用vars()locals()來訪問它。這意味着它可能只是將其分配給該字典動態創建變量,例如:

>>> new_var_name = 'my_var' 
>>> vars()[new_var_name] = "I'm your new variable!" 
>>> print my_var 
"I'm your new variable!" 

說實話,我不知道如何與vars()篡改可能永遠是合理的。但至少,這很有趣。無論如何,請使用Sven Marnach的答案。

+1

不允許更改'vars()'或'locals()'返回的字典。您只能更改由'globals()'返回的字典。你的代碼只能工作,因爲你在全局範圍內執行它,它不會在函數內部工作。 – 2012-07-23 19:13:25

+0

是的。這顯然不是一個成功的解決方案,只是一個有趣的怪癖。 – joe 2012-07-23 19:56:20

相關問題