如何在for循环中为变量名添加+1?

时间:2015-02-11 17:54:52

标签: python django

'nearestzipcodes'是包含5个项目(键/值)的列表。我试图只取每个值并将其分配给account.nearestzip1到5.我猜的下面的代码不起作用,因为它为nearestzipcodes中的每个项目分配全部5个。

如何更正此循环?我只是在nearestzip的末尾添加+1并删除接下来的4个重复行吗?

for i in nearestzipcodes:
    account.nearestzip1 = i.values()
    account.nearestzip2 = i.values()
    account.nearestzip3 = i.values()
    account.nearestzip4 = i.values()
    account.nearestzip5 = i.values()

2 个答案:

答案 0 :(得分:0)

您可以使用setattr,如下所示:

for i,v in enumerate(nearestzipcodes,1):
     setattr(account, 'nearestzip' + str(i), v.values())

然而,这是一个奇怪的设计选择。引起注意的真正问题是为什么不在account内使用某种容器来保存nearestzip

虽然setattr应该直接服务于你的目的,但它的使用通常更多地保留用于动态属性访问不可避免的情况;它会产生额外的性能成本并使代码的可读性降低。只有你必须使用它。在我看来,您的情况正在为list内的account属性大喊大叫。您将通过索引获得相同的结果:

account.nearestzip[0]
account.nearestzip[1]
account.nearestzip[2]
...

答案 1 :(得分:0)

每个account.nearestzipcode是一个django formfield条目,所以我不知道如何用列表替换它。我很感激这方面的一个例子。

在任何情况下,由于列表中只有5个项目,我想我可以这样做:

account.nearestzip1 = nearestzipcodes[0]
account.nearestzip2 = nearestzipcodes[1]
account.nearestzip3 = nearestzipcodes[2]
account.nearestzip4 = nearestzipcodes[3]
account.nearestzip5 = nearestzipcodes[4]