Python通过索引迭代字典

Dev*_*.K. 37 python dictionary

我想通过索引号迭代python中的字典.

示例:

 dict = {'apple':'red','mango':'green','orange':'orange'}
Run Code Online (Sandbox Code Playgroud)

我想从头到尾遍历字典,以便我可以通过索引访问字典项.例如,第1项将是苹果,第2项将是芒果,值将为绿色.

像这样的东西:

for i in range(0,len(dict)):
    dict.i
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 84

您可以迭代键并按键获取值:

for key in dict.iterkeys():
    print key, dict[key]
Run Code Online (Sandbox Code Playgroud)

您可以迭代键和相应的值:

for key, value in dict.iteritems():
    print key, value
Run Code Online (Sandbox Code Playgroud)

enumerate如果您想要索引,可以使用(请记住,词典没有订单):

>>> for index, key in enumerate(dict):
...     print index, key
... 
0 orange
1 mango
2 apple
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,字典是无序的,任何更改都可能导致所有项目的不同索引 (6认同)
  • 注意:`iteritems()` 可能适用于较旧的 python 版本,请尝试使用 `for key, value in dict.items(): print(key, value)` for python3 (3认同)
  • 除非您当然要使用OrderedDict:https://docs.python.org/2/library/collections.html#collections.OrderedDict (2认同)
  • 或:除非您使用cpython> = 3.6,否则它将保留插入顺序。 (2认同)

Ser*_*rov 23

这里有一些非常好的答案.我想在这里添加以下内容:

some_dict = {
    "foo": "bar",
    "lorem": "ipsum"
}

for index, (key, value) in enumerate(some_dict.items()):
    print(index, key, value)
Run Code Online (Sandbox Code Playgroud)

结果是

0 foo bar
1 lorem ipsum
Run Code Online (Sandbox Code Playgroud)

似乎可以使用Python 2.73.5


Suk*_*lra -31

我想不出你想要这样做的任何理由。如果你只需要迭代字典,你就可以这样做。

for key, elem in testDict.items():
    print key, elem
Run Code Online (Sandbox Code Playgroud)

或者

for i in testDict:
     print i, testDict[i]
Run Code Online (Sandbox Code Playgroud)

  • 这并不能回答问题。如果您无法理解为什么有人想要这样做,那也没关系。@alecxe给出了正确的答案:http://stackoverflow.com/a/17793421/835428 (93认同)
  • 为什么OP接受这个答案?因为这不是OP提出的实际问题的答案。诡异的。 (8认同)
  • @RikSmith-Unna 如果你无法理解,这很重要。因为了解更大的图景可能会揭示更好/更简单的解决方案。如果是这样,你必须询问OP(大局)。 (2认同)