2011-12-02 15 views

答えて

6

はい、それはいつも真です。 Pythonによって保証されている場合は、ディシジョンに修正を加える必要はありません。

関連仕様:http://docs.python.org/library/stdtypes.html#dict.items

それが同期して行くの辞書から保護し、無視できる余分なメモリを使用して、両方のため、これは、一般的に優れている:

dict((k,v) for k,v in d.iteritems())

+2

アンパックは不要ですが、 'dict(d.iteritems())'も同様です。その点に関しては、ほとんどの場合、(dictを含む)特殊ケースのマッピング(一般的にはiterablesよりも)は、とにかく、それは普遍的かどうかはわかりませんが。 – delnan

+0

@delnanがあなたのコメントをアップしましたが、私はこの例に近いと思います。 – Triptych

+0

'd.copy()'がはるかに優れているので、実際には 'dict((k、v)for k、v.d.iteritems())'や 'dict(d.iteritems())' 。 – Gabe

2

あなたがするかどうかを求めている場合キーと値は同じ順序で返されますが、答えはYesです。 documentationは言う:

items()場合は、keys()values()iteritems()iterkeys()、およびitervalues()が辞書に無い介在の変更で呼び出され、リストが直接対応します。

あなたはdict(zip(d.keys(), d.values())) == dは常にすべての状況下でTrueに評価されるかどうかを求めている場合は、その答えは、あなたが他の1がd.keys()を実行している間dを変更する1、d.values()、またはdict(...)で、複数のスレッドを持つことができる番号です。これにより、上に引用した条件が無効になる間に変更が加えられます。

2

はい、これはd.itemsによって返されるキーと値が同じ順序で列挙されている

:-)保証動作である:それはマルチスレッド環境では、http://docs.python.org/library/stdtypes.html#dict.items

注連続してd.keys()d.values()を呼び出す間の突然変異を危険にさらすのではなく、d.items()を一度にすべて抽出することが最善です。

関連する問題