通常、メソッドdict
を使用してキーにアクセスします。keys()
d = {'a':1, 'b':2, 'c':3}
for k in d.keys(): print k
しかし、時々私はこのコードを見ます:
for k in d: print k
このコードは正しいですか? 安全?
通常、メソッドdict
を使用してキーにアクセスします。keys()
d = {'a':1, 'b':2, 'c':3}
for k in d.keys(): print k
しかし、時々私はこのコードを見ます:
for k in d: print k
このコードは正しいですか? 安全?
あなたの明確な質問に答えるために、はい、それは安全です。
あなたが持っているとは知らなかった質問に答えるために:
Python 2.xの場合:dict.keys()
キーのリストを返します。
しかし、それを繰り返すことはそれらをfor k in dict
繰り返します。
反復は、リストを作成するよりも高速です。
dict.keys()
Python 3+では、イテレータも返すため、明示的に呼び出すのは遅くありません。
items()
ほとんどの辞書のニーズは、通常、次のようにキーではなく繰り返し処理することで解決できます。
for k, v in dict.items():
# k is the key
# v is the value
print '%s: %s' % (k, v)
これはすでに述べましたが、これらの議論にいくつかの正確な数字を追加したいと思いました. だから私は比較しました:
def iter_dtest(dtest):
for i in dtest:
pass
と
def list_dtest(dtest):
for i in dtest.keys():
pass
1 000 000 アイテムの辞書 (フロート キー) が使用されtimeit
、100 回の繰り返しで使用されました。結果は次のとおりです。
Python 2.7.1:
iter_dtest: 3.92487884435s
list_dtest: 6.24848171448s
Python 3.2.1:
iter_dtest: 3.4850587113842555s
list_dtest: 3.535072302413432s
明らかにdtest.keys()
、Python 2.x では呼び出しにいくつかの欠点があります。
2 番目のコード例の動作は を呼び出すのと同じ.keys()
です。したがって、これは正しく安全です。
それは同じではありません。
for k in d: print k
追加のリストは作成されませんが、
for k in d.keys(): print k
別のリストを作成し、それを繰り返します
少なくともPython2では。Python3ではdict.keys()
イテレータです。
したがって、またはのいずれかを使用できfor k in d.iterkeys()
ますfor k in d
。どちらも同じ結果になります。