2017-08-12 4 views
2

シンプルなコードが動作していないため、その理由を理解することができません。次のように正常に機能しないスーパーシンプルネストPythonのfor-inループ...入力と関係するもの

コードは次のとおりです。

def myFunction(otherDictionary, mongoDbCollection): 

    for p in otherDictionary: 

     print('hi') 

     for d in mongoDbCollection: 

      print('hello') 

明らかに最終的な目標は、ハイテクのの束を印刷し、ハローのが、純粋にループメカニズムが適切に機能していなかったようにそれが見えたとき、デバッグ目的のためにこれをやっていません。

私はこの機能を嫌に思うときは、hiを1つだけ印刷してからhelloのすべてを印刷し、次にhiの残りの部分を続けて印刷します。か何かのように:

hi 
hello 
hello 
hello 
hello 
hi 
hi 
hi 
hi 

いうより:

hi 
hello 
hello 
hello 
hello 
hi 
hello 
hello 
hello 
hello 

など.....

それは間違いなく私がotherDictionary &を変えたときのように関数の入力とは何かを持っていますmongoDbCollectionを[1,2,3,4,5]に設定してこの問題をデバッグすると、hiとhelloが期待通りに表示されます。

このような問題の原因となる可能性のある入力には、どのようなものがありますか?

{ 'randomKey': 10, 'otherRandomKey': 3, 'evenMoreRandomKey': 14 } 

キーの中に変な文字/記号が原因と考えられます。

はmongoDbCollectionが私のmongoデータベース

otherDictionaryからコレクションを=

は、このようなそれぞれのキーワードとそれぞれのカウントを持つ単純な辞書ですこのようなエラー?

私は完全に困惑しています!

それはmongoDbCollectionが発電機であることは可能です:コードは

+1

再現可能な例はありますか?そして、いいえ、「キーの奇妙な文字/記号」はこれを引き起こすことができませんでした。 –

+1

また、あなたの 'mongoDbCollection'オブジェクトは**正確に**ですか? –

+0

mongoDbCollectionオブジェクトは、この{key:val、key:val}、{key:val、key:val}のようなスタックされた辞書の束です。 – learningToCode54321

答えて

3

私はMongoDBのを使用していないので、私は完全にオフベースここにあるかもしれないけど...動作していない、それはあまりにも簡単なのですか?ジェネレータは一度だけ反復することができます。 2度目の反復を試みると、それはできなくなり、基本的には空の反復可能になります。あなたは、あなたの質問に示したものと同様の挙動を引き起こす

:初期"hi"が一度に印刷されるだろう、mongoDbCollection回の"hello"X量を印刷して反復した後、"hi"されるだろうが、残りのために印刷されます最初のforループ。

それはこのようなものになります。それを修正するには

hi 
hello 
hello 
hello 
# "hello" however many times are in mongoDbCollection ... 
hi 
hi 
hi 
# "hi" however many times are in otherDictionary ... 

を、あなたはどんな最も密接倍の無限の量(例えば、リストや辞書、上で反復可能オブジェクトを作成する必要があります一致するmongoDbCollection)。

def myFunction(otherDictionary, mongoDbCollection): 
    collection = list(mongoDbCollection) # or use dict or some other iterable object 
    for p in otherDictionary: 
     print('hi') 
     for d in collection: 
      print('hello') 
+0

それはまさにそれでした! – learningToCode54321

+2

@ learningToCode54321質問の「hi」と「hello」プリントアウトのシーケンスは、実際にプリントされたものではありませんでしたか?私の他のコメントで述べたように、 'mongoDbCollection'がコレクションであっても、あなたの質問のシーケンスは不可能でした。 –

関連する問題