enumerate() for dictionary in python
我知道我们使用
代码:
1 2 3 4 | enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} for i, j in enumerate(enumm): print(i, j) |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 0 0 1 1 2 2 3 4 4 5 5 6 6 7 |
有人能解释输出吗?
输出的第一列是
1 2 | for k, v in enumm.items(): print(k, v) |
输出应该是:
1 2 3 4 5 6 7 | 0 1 1 2 2 3 4 4 5 5 6 6 7 7 |
除了已经提供的答案之外,python还有一个非常好的模式,允许您枚举字典的键和值。
通常情况下,您枚举字典的键:
1 2 3 4 | example_dict = {1:'a', 2:'b', 3:'c', 4:'d'} for i, k in enumerate(example_dict): print(i, k) |
输出:
1 2 3 4 | 0 1 1 2 2 3 3 4 |
但是,如果要同时枚举键和值,则可以这样:
1 2 | for i, (k, v) in enumerate(example_dict.items()): print(i, k, v) |
输出:
1 2 3 4 | 0 1 a 1 2 b 2 3 c 3 4 d |
1 2 | for k,v in dict.iteritems(): print(k,v) |
我想补充一下,如果你想枚举字典的索引、键和值,你的for循环应该如下:
1 2 | for index, (key, value) in enumerate(your_dict.items()): print(index, key, value) |
因为您使用的是
所以,在行
因此,这里的列是迭代号,后面是字典
其他的解决方案已经演示了如何迭代键和值对,所以我不会在我的中重复相同的步骤。
当处理列表时,
1 2 3 | l = [1, 2, 3, 4, 5, 6, 7, 8, 9] for i, j in enumerate(list): print(i, j) |
给予
1 2 3 4 5 6 7 8 9 | 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 |
其中第一列表示项的索引,第二列表示项本身。
字典里
1 2 3 | enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7} for i, j in enumerate(enumm): print(i, j) |
它给出了输出
1 2 3 4 5 6 7 | 0 0 1 1 2 2 3 4 4 5 5 6 6 7 |
其中第一列给出了
因此,如果您希望第一列是
1 2 | for i, j in enumm.items(): print(i, j) |
输出
1 2 3 4 5 6 7 | 0 1 1 2 2 3 4 4 5 5 6 6 7 7 |
沃伊拉
Python 3:
一种解决方案:
1 2 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])) |
1 2 3 4 5 6 7 8 | 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 |
另一个例子:
1 2 3 4 5 | 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]) |
1 2 3 | 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'))]
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的原因。它们是由