如何使用`enumerate`迭代`dict`并解包索引、键和值?

78
如何使用 enumerate 迭代一个字典,以便在迭代时能够同时解包索引、键和值?类似于下面的示例:
for i, (k, v) in enumerate(mydict):
    # some stuff
我希望能够遍历名为 mydict 的字典中的键和值,并对它们进行计数,以便我知道何时处理到最后一组键值对。

4
你想在字典中使用索引是想做什么? - Ashwini Chaudhary
1
我正在将字典打印到文件中,因此需要知道何时插入换行符。 - themink
1
索引对此是否有影响?在循环结束时,您知道已经完成了字典并可以插入换行符。 - Ashwini Chaudhary
1
我在每个值之间插入逗号(它是一个.csv文件),我需要知道何时插入逗号和何时插入换行符。 - themink
2
不要重复造轮子,使用内置的 csv 模块,它支持字典。 - Azat Ibrakov
2个回答

117

不要使用mydict,而应该使用mydict.items()enumerate

for i, (k, v) in enumerate(mydict.items()):
    # your stuff

示例示范:

mydict = {1: 'a', 2: 'b'}
for i, (k, v) in enumerate(mydict.items()):
    print("index: {}, key: {}, value: {}".format(i, k, v))

# which will print:
# -----------------
# index: 0, key: 1, value: a
# index: 1, key: 2, value: b

解释:

  • enumerate() 返回一个迭代器对象,其中包含元组格式为:[(索引, 列表元素), ...]
  • dict.items() 返回一个迭代器对象 (在 Python 3.x 中返回 list, 在 Python 2.7 中返回迭代器),格式为:[(键, 值), ...]
  • 将它们结合在一起,enumerate(dict.items()) 将返回一个迭代器对象,其中包含元组格式为:[(索引, (键, 值)), ...]

0

我们也可以使用 itertools.count 进行计数。

from itertools import count
for i, (k, v) in zip(count(), mydict.items()):
    # do something

这在编程中非常有用,特别是当你想让计数器成为小数时。例如:

mydict = dict(zip(range(3), range(10, 13)))

for i, (k, v) in zip(count(step=0.5), mydict.items()):
    print(f"index={i:<3}, key={k}, value={v}")
    
# index=0  , key=0, value=10
# index=0.5, key=1, value=11
# index=1.0, key=2, value=12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接