如何从我的Python主函数返回多个字典

时间:2012-05-15 21:57:18

标签: python function methods dictionary

我有一个main函数,包含两个我想输出的字典。我已经省略了字典的创建方式。

这是我的功能:

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}

我做得不对?

2 个答案:

答案 0 :(得分: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语句的函数)?

答案 1 :(得分:2)

您不是return 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以返回两个词典,那么您应该没问题。