2

辞書を繰り返し処理するときに、特定のキーがある場合は項目をスキップしたいと考えています。のようなことを試しましmydict.next()たが、エラーメッセージが表示されました'dict' object has no attribute 'next'

for key, value in mydict.iteritems():
    if key == 'skipthis':
        mydict.next()
    # for others do some complicated process

それが重要な場合、私はPython 2.7を使用しています。

4

4 に答える 4

13

使用continue:

for key, value in mydict.iteritems():
    if key == 'skipthis':
        continue

以下も参照してください。

于 2013-08-09T20:27:53.340 に答える
5

を呼び出したいと思いますがmydict.iteritems().next()、反復する前にリストをフィルタリングする必要があります。

リストをフィルタリングするには、ジェネレータ式を使用できます。

 r = ((k, v) for k, v in mydict.iteritems() if k != 'skipthis')
 for k,v in r:
      #do something complicated to filtered items

これはジェネレーター式であるため、元の dict を 1 回だけトラバースするという特性があり、辞書を反復し、必要に応じて要素を新しいものにコピーしたり既存の要素を削除したりする他の代替手段よりもパフォーマンスが向上します。ジェネレーターを連鎖させることもできます。これは、反復するときに強力な概念になる可能性があります。

ジェネレータ式の詳細: http://www.python.org/dev/peps/pep-0289/

于 2013-08-09T20:44:49.010 に答える
4

別の代替手段は次のとおりです。

for key, value in mydict.iteritems():
    if key != 'skipthis':
        # Do whatever

でキーをスキップするのと同じことを行いますcontinue。if ステートメントの下のコードは、キーが でない場合にのみ実行されます'skipthis'

この方法の利点は、よりクリーンで行を節約できることです。また、私の意見では、読むのが少し良いです。

于 2013-08-09T20:29:28.200 に答える
2

なぜこれを行う必要があるのか​​という質問をする必要があります。コードの 1 つの単位は 1 つのことを行う必要があるため、この場合、ループに到達する前に dict を「消去」する必要があります。

これらの行に沿ったもの:

def dict_cleaner(my_dict):
    #make a dict of stuff you want your loop to deal with
    return clean_dict

for key, value in dict_cleaner(mydict).iteritems():
#Do the stuff the loop actually does, no worrying about selecting items from it.
于 2013-08-09T20:53:59.517 に答える