2012-05-15 27 views
1

我有一個主函數,包含我想輸出的兩個字典。我已經省略了字典是如何創建的。如何從我的Python主要功能返回多個字典

這裏是我的功能:

def main() 
    dict1 = {'a1':{'b1':1,'c1':2},'a2':{'b2':1,'c2':2}} 
    dict2 = {'cat':0,'dog':2} 
    return dict1, dict2 
if __main__ == '__main__': 
>...main() 

這裏是如何,我稱它在Python提示:

>>from filename import * 
>>x,y=main() 

或多或少這就是我得到

>>print x 
'a1' 
>>print y 
'a2' 

但這是我想要的:

>>print x 
{'a1':{'b1':1,'c1':2},'a2':{'b2':1,'c2':2}} 
>>print y 
{'cat':0,'dog':2} 

我在做什麼不對?

+1

我在我的編譯器中複製了你的代碼,它工作得很好... – Martol1ni

+5

你沒有顯示實際的代碼。請不要發佈你沒有測試過的東西。 –

回答

2

已經不正是你希望它的代碼:

In [4]: def main(): 
    ...:  dict1 = {'a1':{'b1':1,'c1':2},'a2':{'b2':1,'c2':2}} 
    ...:  dict2 = {'cat':0,'dog':2} 
    ...:  return dict1, dict2 
    ...: 

In [5]: x, y = main() 

In [6]: x 
Out[6]: {'a1': {'b1': 1, 'c1': 2}, 'a2': {'b2': 1, 'c2': 2}} 

In [7]: y 
Out[7]: {'cat': 0, 'dog': 2} 

也許你不小心調用不同的main()功能(例如,一個具有不同return聲明)?

2

你不是return ing dict1, dict2,只是dict1。您可以輕鬆地重現此問題:

>>> dict1 = {'a1': 'some_stuff', 'a2': 'some_other_stuff'} 
>>> dict2 = {'cat': 0, 'dog': 0} 
>>> return_val = dict1 
>>> x, y = return_val 
>>> x 
'a1' 
>>> y 
'a2' 
>>> return_val = dict1, dict2 
>>> x, y = return_val 
>>> x 
{'a1': 'some_stuff', 'a2': 'some_other_stuff'} 
>>> y 
{'cat': 0, 'dog': 0} 

這是因爲,當你遍歷你得到它的鍵的字典,所以當你x, y = main()main返回dict1,你迭代的dict1鑰匙。由於碰巧有兩個,你不會得到一個錯誤,並且xy取這些鍵的值。

如果更改main返回兩個字典,你應該沒問題。

+0

他*發佈的代碼返回兩個字典,所以它應該沒問題。他執行*的代碼沒有。 – cvoinescu

+0

@cvoinescu是的,他發佈的代碼很好。但是這顯然不是他真正的代碼,所以這不是我在我的答案中提到的。如果問問題的人沒有犯這種錯誤,那將是很好的,但至少在這種情況下,真正的問題是明確的。 – agf

+0

也許他正在執行舊代碼,因爲他不知道如何重新加載模塊('reload(filename)'),以便將所做的更改應用於filename.py? – cvoinescu