1

我有一个包含两个要输出的字典的主函数。我省略了字典是如何创建的。

这是我的功能:

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}

我做错了什么?

4

2 回答 2

2

你不是在returndict1, 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。由于恰好有两个,因此您不会收到错误并x获取y这些键的值。

如果您更改main为返回两个字典,则应该没问题。

于 2012-05-15T22:02:16.723 回答
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语句的函数)?

于 2012-05-15T22:00:49.843 回答