enumerate()用于python中的字典

Adi*_*shn 40 python dictionary enumerate python-3.x

我知道我们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)
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

0 0

1 1

2 2

3 4

4 5

5 6

6 7
Run Code Online (Sandbox Code Playgroud)

有人可以解释输出吗?

小智 47

输出的第一列是每个项目的索引,enumm第二列是其键.如果要迭代字典,请使用.items():

for k, v in enumm.items():
    print(k, v)
Run Code Online (Sandbox Code Playgroud)

输出应该如下:

0 1
1 2
2 3
4 4 
5 5
6 6
7 7
Run Code Online (Sandbox Code Playgroud)


Joã*_*ida 42

除了已经提供的答案之外,Python中还有一个非常好的模式,它允许您枚举字典的键和值.

通常情况下,您枚举字典的键:

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

for i, k in enumerate(example_dict):
    print(i, k)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

0 1
1 2
2 3
3 4
Run Code Online (Sandbox Code Playgroud)

但是如果你想通过键和值枚举这就是这样的:

for i, (k, v) in enumerate(example_dict.items()):
    print(i, k, v)
Run Code Online (Sandbox Code Playgroud)

哪个输出:

0 1 a
1 2 b
2 3 c
3 4 d
Run Code Online (Sandbox Code Playgroud)

  • (+1) 您还可以简单地使用 `dictionary.items()` (不枚举)来获取具有键值对作为元组列表的视图对象。 (5认同)
  • 这对于 Python 3.7+ 来说是可以的,因为字典是保证有序的 (4认同)
  • 我不确定为什么这是评分最高的答案。基本上是代码太多了;并可能产生错误的答案。将“enumerate”与“dict”一起使用存在潜在危险。Python 在使用“enumerate”时不保证按键顺序;在后续运行中,密钥可能会以不同的顺序发出。@roadrunner66的答案是最正确的解决方案。 (2认同)

roa*_*r66 13

for k,v in dict.iteritems():
    print(k,v)
Run Code Online (Sandbox Code Playgroud)

  • 应该注意这只适用于python2.在python3中删除了dict.iteritems(),另请参阅/sf/ask/2129293701/ (11认同)
  • 不允许我在这篇文章中进行2个字符的编辑,但是OP将其标记为适用于Python 3,因此print语句需要在k,v周围加上括号。 (2认同)

Jor*_*kie 12

我以为我想补充一下,如果您想枚举字典的索引,键和值,则for循环应如下所示:

for index, (key, value) in enumerate(your_dict.items()):
    print(index, key, value)
Run Code Online (Sandbox Code Playgroud)

  • 这个问题与语法问题有关,这个答案提供了两个添加括号的最短解决方案:`idx, (k, v) in enumerate(d.items()):` (3认同)
  • 嗨肖恩,我不确定您是否同意这个答案,或者只是说较短的变量名称可以得到更好的答案? (2认同)

小智 6

enumerate()当处理列表时,实际上给出了列表中项目的索引和值。例如:

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

给出

0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
Run Code Online (Sandbox Code Playgroud)

其中第一列表示项目的索引,第二列表示项目本身。

在字典里

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

它给出了输出

0 0
1 1
2 2
3 4
4 5
5 6
6 7
Run Code Online (Sandbox Code Playgroud)

其中第一列给出对的索引key:value,第二列表示keys字典的索引enumm。

因此,如果您希望第一列为keys第二列values,最好尝试dict.iteritems()(Python 2)或dict.items()(Python 3)

for i, j in enumm.items():
    print(i, j)
Run Code Online (Sandbox Code Playgroud)

输出

0 1
1 2
2 3
4 4
5 5
6 6
7 7
Run Code Online (Sandbox Code Playgroud)

瞧


Ank*_*jan 5

由于您正在使用,enumerate因此您i实际上是键的索引而不是键本身。

因此,即使没有 key ,您也会进入3该行的第一列。3 43

enumerate 遍历数据结构(无论是列表还是字典),同时还提供当前的迭代次数。

因此,这里的列是迭代次数,后跟字典中的键 enum

其他解决方案已经展示了如何迭代键和值对,所以我不会在我的中重复相同的内容。