2016-03-27 15 views
7

リストを反復するのにenumerateを使用していますが、辞書で試してみましたが、エラーは発生しませんでした。python辞書のenumerate()

CODE:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} 

for i, j in enumerate(enumm): 
    print(i, j) 

がOUTPUT:

0 0 

1 1 

2 2 

3 4 

4 5 

5 6 

6 7 

誰かが出力を説明できますか?

+1

dictをループするとキーが印刷されるので、何を期待しましたか? – salparadise

答えて

4
for k,v in dict.iteritems(): 
    print(k,v) 
+0

この投稿に2文字の編集をさせてはいませんが、OPはこれをPython 3用としてタグ付けしています。そのため、print文にはk、vを中心とする括弧が必要です。 –

+0

@Mr。私、タイは、修正されます。 – roadrunner66

+2

これはpython2でのみ利用可能です。 dict.iteritems()がpython3で削除されました。https://stackoverflow.com/questions/30418481/error-dict-object-has-no-attribute-iteritems-when-trying-to-use-networkx – gyger

1

確かに混乱しているようです。これは何が起こっているのかです。列挙型(この場合はi)の最初の値は、0から始まる次のインデックス値を返します。0,1,2,3、...辞書にあるものに関係なく、常にこれらの数値を返します。 enumerate(この場合はj)の2番目の値は、辞書/ enumm(Pythonで辞書と呼ぶ)の値を返しています。あなたが本当にやりたいことは、roadrunner66が何を返答したかです。

9

出力の最初の列は、各項目のインデックスでenummであり、次の列はそのキーです。あなたは辞書を反復処理したい場合は、.items()を使用します

for k, v in enumm.items(): 
    print(k, v) 

を、出力は次のようになります。Pythonの辞書上

0 1 
1 2 
2 3 
4 4 
5 5 
6 6 
7 7 
0
  1. 反復処理することは、正確にそのキーを反復処理することを意味しますdict.keys()
  2. キーの順序は実装コードによって決まり、特定の順序は期待できません。

    キーと値は任意の順序で反復され、 非ランダムであり、Pythonの実装によって異なり、 辞書の挿入と削除の履歴に依存します。キー、値、および アイテムのビューが、 ディクショナリへの介入の変更なしで反復される場合、アイテムの順序は直接対応します。あなたが最初の列に7にインデックス0を参照してください理由です

。それらはenumerateによって生成され、常に正しい順序になっています。さらに、dictのキー0〜7が2番目の列に表示されます。それらはソートされていません。