簡體   English   中英

enumerate() 用於 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對的索引,第二列表示字典enummkeys

因此,如果您希望第一列作為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 的回應。

  1. 迭代 Python dict 意味着以與dict.keys()完全相同的方式迭代其鍵
  2. 鍵的順序由實現代碼決定,您不能指望某些特定的順序:

    鍵和值以任意順序迭代,該順序是非隨機的,因 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM