2013-05-17 39 views
0

我想簡化我的代碼,特別是爲了避免方括號;所以我的問題是:Python如何從名稱和反向生成字典

def someFunction(): 
    someString = "Hi!" 
    someNumber = 22 
    somePointer = "" 
    someList = [] 

    names_list = ['someString','someNumber','somePointer','someList'] 
    val_list = [someString, someNumber, somePointer, someList] 

    someDict = {} 

    for i in range(len(names_list)) : 
     someDict[names_list[i]] = val_list[i] 

    someOtherFunction(someDict) 

def someOtherFunction(dict): 
    for key, value in dict.iteritems() : 
     print key, value 

    print someString, someNumber 

someFunction() 

是否有可能使它像這樣?

+3

這很不清楚。你想要達到什麼目標,什麼是指數計算器,s_name和d_name? – Bull

+0

*「特別是爲了避免方括號」*我不喜歡這裏要去的地方,你應該用方括號 – jamylak

+0

EDITED來澄清我的觀點。需要生成不存在的變量。關於括號,我使用了很多,但如果沒有必要,我不想使用它們,這使得代碼更具可讀性。 – Alex

回答

1

不能明白爲什麼這可能是有用的 如果你知道的變量列表,他們會在一些功能使用

# generate names and values again at other place 
def foo(): 
    for d in someDict : 
     d_name = d 

,那麼你只可以在函數調用期間解壓它們

def foo(someString=None, 
     someNumber=None, 
     somePointer=None, 
     someList=None): 
    pass 

foo(**someDict) 
1

如果我理解正確,您需要一個將變量名稱與值關聯的字典。我建議你建立一個名稱列表和值列表。然後,你添加項目到你的字典。

someString = "Hi!" 
someNumber = 22 
somePointer = 4 
someList = [] 

names_list = ['someString','someNumber','somePointer','someList'] 
val_list = [someString, someNumber, somePointer, someList] 
len_list = len(val_list) 

someDict = {} 

for i in range(len_list) : 
    someDict[names_list[i]] = val_list[i] 

然後,您可以查詢你的字典做,說

>>> someDict['someString'] 
'Hi!' 
+0

投票尋求幫助。我編輯了我的代碼,使其更清楚地表明,當它們不存在時,我需要在函數中生成變量。 – Alex

0

最簡單的方法,我發現是字典()建於構造:

someString = "Hi!" 
someNumber = 22 
somePointer = "" 
someList = [] 

someDict = dict( 
    string = someString, number = someNumber, 
    pointer = somePointer, list = someList) 

print someDict 

Output : { "string" : "Hi", "number" : 22, "pointer" : "", "list" : [] }