1

出力したい2つの辞書を含む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}

私は何を正しくしていないのですか?

4

2 に答える 2

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 に答える
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。たまたま2つあるので、エラーが発生せず、それらのキーの値をx取得します。y

両方の辞書を返すように変更した場合mainは、問題ないはずです。

于 2012-05-15T22:02:16.723 に答える