我知道我们使用 enumerate
来遍历一个列表,但是我尝试使用它来遍历一个字典,却没有报错。
代码:
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, key in enumerate(enumm):
print(i, key)
输出:
0 0
1 1
2 2
3 4
4 5
5 6
6 7
请问有人可以解释一下输出结果吗?
我知道我们使用 enumerate
来遍历一个列表,但是我尝试使用它来遍历一个字典,却没有报错。
代码:
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, key in enumerate(enumm):
print(i, key)
输出:
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
dictionary.items()
(不需要 enumerate)来获取一个键值对的视图对象,它是一个元组列表。 - Tiago Martins Peres输出的第一列是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()):
- Sean Piankadict1={'a':1, 'b':'banana'}
在Python 2.x中列出字典:
for k,v in dict1.iteritems():
print k,v
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'))
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
。
所以如果您希望第一列是values
而第二列是keys
,最好尝试使用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.keys()
相同的方式迭代其键。键和值的迭代顺序是任意的,这是非随机的,因Python实现而异,并取决于字典插入和删除的历史记录。如果键、值和项视图在没有对字典进行干预的情况下进行迭代,则项目的顺序将直接对应。
这就是为什么您在第一列看到索引0到7。它们是由enumerate
生成的,并始终按正确顺序排列。此外,您可以在第二列看到字典的键0到7。它们没有排序。
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}
在键内包含索引可能会很有用:
d = {'a': 1, 'b': 2}
d = {(i, k): v for i, (k, v) in enumerate(d.items())}
输出:
{(0, 'a'): True, (1, 'b'): False}
for i, j in enumerate(enumm)
这段代码会使得i
在每次迭代时自增,而j
则会获取enumerate
函数参数中的常规元素,这里是一个字典。遍历字典本质上就是遍历它的键。 - Divyanshu Srivastava