web-dev-qa-db-ja.com

pythonの辞書のenumerate()

リストの反復にenumerateを使用していることは知っていますが、辞書で試してみましたが、エラーにはなりませんでした。

コード:

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

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

出力:

0 0

1 1

2 2

3 4

4 5

5 6

6 7

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

30
Aditya Krishn

出力の最初の列はenummの各アイテムのインデックスで、2番目の列はそのキーです。辞書を反復処理する場合は、.items()を使用します。

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

出力は次のようになります。

0 1
1 2
2 3
4 4 
5 5
6 6
7 7
43
user4754843

すでに提供されている回答に加えて、Pythonには非常に素晴らしいパターンがあり、辞書のキーと値の両方を列挙できます。

通常の場合キーの列挙辞書の:

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

for i, k in enumerate(example_dict):
    print(i, k)

どの出力:

0 1
1 2
2 3
3 4

しかしキーと値の両方を列挙するにしたい場合、これが方法です:

for i, (k, v) in enumerate(example_dict.items()):
    print(i, k, v)

どの出力:

0 1 a
1 2 b
2 3 c
3 4 d
33
João Almeida
for k,v in dict.iteritems():
    print(k,v)
11
roadrunner66

辞書のインデックス、キー、値を列挙する場合、forループは次のようになります。

for index, (key, value) in enumerate(your_dict.items()):
    print(index, key, value)
8
Jordan Mackie

enumerate()リストで作業する場合、実際にはリスト内の項目のインデックスと値を提供します。例えば:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i, j in enumerate(list):
    print(i, j)

与える

0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

ここで、最初の列はアイテムのインデックスを示し、2番目の列はアイテム自体を示します。

辞書で

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, j in enumerate(enumm):
    print(i, j)

それは出力を与えます

0 0
1 1
2 2
3 4
4 5
5 6
6 7

ここで、最初の列はkey:valueペアのインデックスを示し、2番目の列は辞書keysenummを示します。

したがって、最初の列をkeysにし、2番目の列をvaluesにする場合は、dict.iteritems()(Python 2) またはdict.items()を試してください。 (Python 3)

for i, j in enumm.items():
    print(i, j)

出力

0 1
1 2
2 3
4 4
5 5
6 6
7 7

出来上がり

3
Abhishek Roy

enumerateを使用しているため、iは実際にはキー自体ではなく、キーのインデックスです。

そのため、キー3がなくても、行の最初の列3 43を取得しています。

enumerateは、データ構造(リストまたは辞書)を反復処理すると同時に、現在の反復数も提供します。

したがって、ここの列は、反復番号の後に辞書enumのキーが続きます

他のソリューションは、キーと値のペアを反復処理する方法をすでに示しているので、私は同じことを繰り返しません。

3
Ankur Ranjan

Python3:

1つの解決策:

enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, k in enumerate(enumm):
    print("{}) d.key={}, d.value={}".format(i, k, enumm[k]))

Output:
0) enumm.key=0, enumm.value=1
1) enumm.key=1, enumm.value=2
2) enumm.key=2, enumm.value=3
3) enumm.key=4, enumm.value=4
4) enumm.key=5, enumm.value=5
5) enumm.key=6, enumm.value=6
6) enumm.key=7, enumm.value=7

別の例:

d = {1 : {'a': 1, 'b' : 2, 'c' : 3},
     2 : {'a': 10, 'b' : 20, 'c' : 30}
    }    
for i, k in enumerate(d):
        print("{}) key={}, value={}".format(i, k, d[k])

Output:    
    0) key=1, value={'a': 1, 'b': 2, 'c': 3}
    1) key=2, value={'a': 10, 'b': 20, 'c': 30}
2

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

2
Mr. Me

d = {0: 'zero'、 '0': 'ZERO'、1: 'one'、 '1': 'ONE'}

print( "列挙されたd =のリスト"、list(enumerate(d.items())))

出力:列挙されたd = [(0、(0、 'zero')),(1、( '0'、 'ZERO'))、(2、(1、 'one'))、(3、( '1'、 'ONE'))]

0
user3358337
  1. Python dictを反復処理するということは、dict.keys()と同じ方法でキーを反復処理することを意味します
  2. キーの順序は実装コードによって決定され、特定の順序を期待することはできません:

    キーと値は、ランダムではなく、Python実装によって異なり、辞書の挿入と削除の履歴に依存する任意の順序で繰り返されます。キー、値、およびアイテムビューがディクショナリに介入する変更なしで繰り返される場合、アイテムの順序は直接対応します。

そのため、最初の列に0〜7のインデックスが表示されます。それらはenumerateによって生成され、常に正しい順序になります。さらに、2番目の列に辞書のキー0〜7が表示されます。それらはソートされていません。

0
VPfB