4

通常、メソッドdictを使用してキーにアクセスします。keys()

d = {'a':1, 'b':2, 'c':3}

for k in d.keys(): print k

しかし、時々私はこのコードを見ます:

for k in d: print k

このコードは正しいですか? 安全?

4

4 に答える 4

11

あなたの明確な質問に答えるために、はい、それは安全です。

あなたが持っているとは知らなかった質問に答えるために:

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)
于 2013-02-06T13:45:35.520 に答える
4

これはすでに述べましたが、これらの議論にいくつかの正確な数字を追加したいと思いました. だから私は比較しました:

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 では呼び出しにいくつかの欠点があります。

于 2013-02-06T14:12:48.287 に答える
3

2 番目のコード例の動作は を呼び出すのと同じ.keys()です。したがって、これは正しく安全です。

于 2013-02-06T13:39:52.653 に答える
0

それは同じではありません。

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。どちらも同じ結果になります。

于 2013-02-06T13:45:19.477 に答える