python中enumerate的作用_enumerate()用于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

有人能解释输出吗?

在听写机上循环打印按键,你期望得到什么?

for i, j in enumerate(enumm)在每次迭代中得到i递增,j从enumerate函数参数中捕获常规项,在本例中,该参数是一个字典。对dict的迭代本质上是对其键的迭代。

输出的第一列是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

除了已经提供的答案之外,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

for k,v in dict.iteritems():

print(k,v)

它不允许我在本文中进行2个字符的编辑,但是OP将其标记为针对python 3,所以print语句需要在k,v周围加上括号。

@我先生,泰,会修好的。

应该注意的是,这只适用于Python2。在python3中删除了dict.iteritems(),另请参见stackoverflow.com/questions/30418481/…

我想补充一下,如果你想枚举字典的索引、键和值,你的for循环应该如下:

for index, (key, value) in enumerate(your_dict.items()):

print(index, key, value)

因为您使用的是enumerate,所以您的i实际上是键的索引,而不是键本身。

所以,在行3 4的第一列中得到3,即使没有键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

沃伊拉

这对字典来说不是真的。您的代码将使用索引(用于迭代)迭代字典,但不提供字典的键值组合。改用dict.items()。

是的,您还可以继续使用dict.items()。谢谢你的纠正。

Python 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}

这肯定让人困惑。这就是发生的事情。枚举的第一个值(在本例中为i)返回从0开始的下一个索引值,因此0、1、2、3、…。它总是返回这些数字,不管字典中是什么。枚举的第二个值(在本例中是j)返回dictionary/enumm中的值(我们在python中将其称为dictionary)。你真正想做的是路行者66的回应。

D=0:'零','0':'零',1:'一','1':'一'

print("枚举d=",list(enumerate(d.items()))

输出:枚举d的列表=[(0,(0,'zero')),(1,('0,'zero')),(2,(1,'one')),(3,('1,'one'))]

对python dict的迭代意味着对其键的迭代与对dict.keys()的迭代完全相同。

键的顺序由实现代码决定,您不能期望某些特定的顺序:

Keys and values are iterated over in an arbitrary order which is

non-random, varies across Python implementations, and depends on the

dictionary’s history of insertions and deletions. If keys, values and

items views are iterated over with no intervening modifications to the

dictionary, the order of items will directly correspond.

这就是您在第一列中看到索引0到7的原因。它们是由enumerate生产的,并且总是按正确的顺序排列。您还可以在第二列中看到dict的键0到7。它们没有分类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值