![](/img/trans.png)
[英]How to enumerate items in a dictionary with enumerate( ) in python
[英]enumerate() for dictionary in python
我知道我們使用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
輸出的第一列是enumm
中每個項目的索引,第二列是它的鍵。 如果你想迭代你的字典,那么使用 .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)
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'))
但這違背了字典 (map, associative array)的目的,字典是一種用於電話簿式查找的有效數據結構。 字典排序可能是實現的附帶條件,不應依賴。 如果您需要訂單,請改用OrderedDict 。
由於您使用的是enumerate
因此您的i
實際上是鍵的索引而不是鍵本身。
所以,你得到3
在該行的第一列3 4
,即使沒有鑰匙3
。
enumerate
遍歷數據結構(無論是列表還是字典),同時還提供當前的迭代次數。
因此,這里的列是迭代次數,后跟字典enum
的鍵
其他解決方案已經展示了如何迭代鍵和值對,所以我不會在我的中重復相同的內容。
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
其中第一列表示項目的索引,第二列表示項目本身。
在字典里
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
對的索引,第二列表示字典enumm
的keys
。
因此,如果您希望第一列作為keys
,第二列作為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
瞧
這肯定看起來令人困惑。 所以這就是正在發生的事情。 enumerate 的第一個值(在本例中為 i)返回從 0 開始的下一個索引值,所以 0, 1, 2, 3, ... 無論字典中有什么,它都會返回這些數字。 enumerate 的第二個值(在本例中為 j)返回字典/枚舉中的值(我們在 Python 中稱之為字典)。 你真正想做的是 roadrunner66 的回應。
dict.keys()
完全相同的方式迭代其鍵鍵和值以任意順序迭代,該順序是非隨機的,因 Python 實現而異,並取決於字典的插入和刪除歷史。 如果在沒有對字典進行干預的情況下迭代鍵、值和項目視圖,項目的順序將直接對應。
這就是您在第一列中看到索引 0 到 7 的原因。 它們由enumerate
產生並且總是以正確的順序排列。 此外,您會在第二列中看到 dict 的鍵 0 到 7。 它們沒有排序。
蟒蛇3:
一種解決方案:
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 = {'a': 1, 'b': 2}
d = {(i, k): v for i, (k, v) in enumerate(d.items())}
輸出:
{(0, 'a'): True, (1, 'b'): False}
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'))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.