我知道我们使用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
有人可以解释输出吗?
Answers:
除了已经提供的答案外,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
第二列是其键。如果要迭代字典,请使用.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
因此您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
对的索引,第二列keys
给出了字典的enumm
。
因此,如果您希望第一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
沃伊拉
那肯定看起来令人困惑。所以这是怎么回事。枚举的第一个值(在本例中为i)返回从0开始的下一个索引值,因此0、1、2、3,...它将始终返回这些数字,而不管字典中的内容如何。enumerate的第二个值(在本例中为j)返回字典/枚举(在Python中称为字典)中的值。您真正想做的是roadrunner66的响应。
Python3:
一种解决方案:
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}
for i, j in enumerate(enumm)
i
在每次迭代时 都会递增,并j
从enumerate
函数参数(在本例中为字典)中捕获通常的项。遍历字典本质上是遍历其键。