【问题标题】:How to access the next iteration of a for loop如何访问 for 循环的下一次迭代
【发布时间】:2016-10-13 12:43:53
【问题描述】:

我有正在循环浏览的字典。我想说,如果一个值 == 某个数字(在这种情况下为 0),那么 for 循环的下一次迭代的值将是该值的 2 倍。

我有一本像下面这样的字典:

d = {'a' : 1, 'b' : 0, 'c' : 4}

当我使用 for 循环遍历字典时,如果当前迭代 = 0,我想将下一次迭代乘以 2。

for k, v in d.items():
    if k == 0:
        [next iteration v = v * 2]
    else:
        v = v + 1

所以我希望最终得到这样的字典:

d = {'a' : 2, 'b' : 0, 'c' : 9}

这只是一个简单的例子,但希望能说明我想要实现的目标。

谢谢

【问题讨论】:

  • 问题是,您使用的是字典,它没有保持其顺序,因此您很可能会在不同的运行中得到不同的值。
  • 你知道我可以用另一种方式实现这一目标吗?

标签: python-3.x for-loop dictionary


【解决方案1】:

您可以使用orderedDict 拥有字典并保持订单。

查看您的算法,如果它不为零,则将所有值加 1,如果为零,则先将下一项相乘,然后再将其加 1。一种基本和最简单的方法是,有一个标志来决定是否应该乘以下一个值。

import collections

d = (("a", 1), ("b", 0), ("c", 4))
od = collections.OrderedDict(d)

multiply = False
for k in od.keys():
    if multiply:
        od[k] *= 2
    if od[k] != 0:
        od[k] += 1
        multiply = False
    else:
        multiply = True

print(od)

【讨论】:

    【解决方案2】:

    不幸的是,您使用的是字典,字典并没有保持顺序。您将不得不使用诸如列表之类的东西。不过,不确定您是否会在列表中设置键/值对。

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2011-08-20
      相关资源
      最近更新 更多