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
誰かが出力を説明できますか?
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
誰かが出力を説明できますか?
回答:
すでに提供されている回答に加えて、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
dictionary.items()
(列挙せずに)使用して、タプルのリストとしてキーと値のペアを持つビューオブジェクトを取得することもできます。
出力の最初の列はの各項目のインデックスで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
追加したいと思ったのですが、辞書のインデックス、キー、値を列挙したい場合、forループは次のようになります。
for index, (key, value) in enumerate(your_dict.items()):
print(index, key, value)
idx, (k, v) in enumerate(d.items()):
dict1={'a':1, 'b':'banana'}
Python 2.xで辞書を一覧表示するには:
for k,v in dict1.iteritems():
print k,v
Python 3.xでは、次を使用します。
for k,v in dict1.items():
print(k,v)
# a 1
# b banana
最後に、他の人が示しているように、実行中のインデックスが必要な場合は、それも使用できます。
for i in enumerate(dict1.items()):
print(i)
# (0, ('a', 1))
# (1, ('b', 'banana'))
しかし、これは、電話帳スタイルのルックアップのための効率的なデータ構造である辞書(マップ、連想配列)の目的を 無効にします。辞書の順序は実装に付随する可能性があるため、信頼しないでください。注文が必要な場合は、代わりにOrderedDictを使用して ください。
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番目の列はkeys
辞書のインデックスを示しenumm
ます。
したがって、最初の列をkeys
としてvalues
、2番目の列をとして使用する場合は、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
出来上がり
それは確かに紛らわしいように思われるに違いありません。だからこれが起こっていることです。enumerateの最初の値(この場合はi)は、0から始まる次のインデックス値を返すため、0、1、2、3、...ディクショナリの内容に関係なく、常にこれらの数値を返します。enumerateの2番目の値(この場合はj)は、辞書/列挙型(Pythonでは辞書と呼びます)の値を返します。あなたが本当にやりたいのは、roadrunner66が応答したことです。
dict.keys()
キーと値は、ランダムではなく、Pythonの実装によって異なり、辞書の挿入と削除の履歴に応じて、任意の順序で繰り返されます。キー、値、およびアイテムのビューがディクショナリに介入する変更なしで繰り返される場合、アイテムの順序は直接対応します。
そのため、最初の列に0から7のインデックスが表示されます。それらはによって生成されenumerate
、常に正しい順序になっています。さらに、2番目の列にdictのキー0から7が表示されます。それらはソートされていません。
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}
d = {0: 'zero', '0': 'ZERO', 1: 'one', '1': 'ONE'}
print("List of enumerated d= ", list(enumerate(d.items())))
出力:
List of enumerated d= [(0, (0, 'zero')), (1, ('0', 'ZERO')), (2, (1, 'one')), (3, ('1', 'ONE'))]
for i, j in enumerate(enumm)
はi
反復ごとにインクリメントさj
れ、enumerate
関数の引数(この場合は辞書)から通常の項目をキャッチします。dictを反復処理することは、基本的にそのキーを反復処理することです。