2015-02-11 33 views
0

'nearestzipcodes'是一個包含5個項目(一個鍵/值)的列表。我試圖只取每個值並將其分配給account.nearestzip1到5.下面我猜測的代碼將不起作用,因爲它將每個項目的所有5個分配給nearestzipcodes中的每個項目。如何在for循環中將變量名+1加1?

我該如何糾正這個循環?我只需在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() 
+1

更換account.nearestzip1-5一個列表。 – 2015-02-11 17:59:28

回答

0

您可以使用SETATTR,像這樣:

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

這是一個奇怪的設計選擇,但是。引起注意的真正問題是爲什麼不使用account內的某種容器來容納nearestzip

雖然setattr應該直接爲您的目的服務,但它的使用通常更多地用於動態屬性訪問不可避免的情況;它會導致額外的性能成本,並使代碼不易讀。只有你必須使用它。在我看來,你的情況是在account裏面的list屬性大喊大叫。您可以通過索引獲得相同的結果:

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

那麼就像在我的django模型裏面放一個列表? – david 2015-02-11 18:10:35

+0

@donnaloia我不熟悉_django_,並且不能真正爲您提供一門課程的建議。如果這些屬性在某種程度上是API的一部分,那麼我想你可以回到'setattr'上。你必須打這個電話。 – Eithos 2015-02-11 18:12:22

+0

好的,謝謝。 – david 2015-02-11 18:13:43

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]