2017-06-22 54 views
0

我有一個函數,我試圖循環,目的是修改這些變量與", "後面。迭代通過每個鍵和它的價值,功能

def create_merge(address, city, state_province, country, postal_code, contact, state): 
    for key in locals().keys(): 
     for value in locals().values(): 
      print(key, value) 

這是一種作品,但不是真的。雖然它給了我一個適當的讀取所有值的def,它只顯示state的關鍵。我明白了爲什麼,因爲我在循環遍歷第一個鍵中的所有值,然後才轉到第二個鍵。

我想吃點什麼的是會產生一個循環,說:

address 123 My Address 
city 
state_province Illinois 
country USA 
postal_code 12345 
contact McGruff 
state Illinois 

而這一點,顯然只是首先列出鍵,那麼數值。我該如何做一個關鍵和一個值?

for key in locals().keys(): 
    print (key) 
for value in locals().values(): 
    print (value) 

... print (key, key.values())不起作用。

for key in locals().keys(): 
    print (key, locals().values()) 

我覺得我越來越近,但就是無法得到它!感謝您的任何建議/意見。

最後說明:我需要這樣做,以便我可以看到value是否爲空,如果不爲空,請在函數繼續之前用", "修改該值。

+0

你能否提供你想要迭代的變量?你有這樣的字典嗎,還是你想通過另一個循環將變量傳遞給函數? 位置= { '地址': '123個我的地址', '城市':無, '州(省)' '伊利諾伊州', '國家': 'USA', 'POSTAL_CODE':12345, '接觸': 'McGruff', 'state':'Illinois'} – Dom

回答

1

您可以循環使用鍵並使用.get方法打印出鍵和鍵的值。

for key in locals().keys(): 
    print(key, locals().get(key)) 

或者,您可以使用索引獲取值。

for key in locals().keys(): 
    print(key, locals()[key]) 

最後,您還可以使用字典的.items()。 (.iteritems()的Python 2.x的)

for key, value in locals().items(): 
    print(key, value) 

確保您實例keyvalue使用這些變量之前。否則,您將在迭代過程中更改locals()中的項目,並且會出現錯誤。

+0

我得到了「RuntimeError:在迭代過程中字典改變大小」的時候編輯:Aha!你的編輯完成了這個技巧,循環遍歷items()':D – BruceWayne

0

雖然@ VictorC的for key, value in locals().items()工作,我發現,這樣做太:

for key, value in zip(locals().keys(), locals().values()): 
    print (key, value) 

(只是指出這這裏記錄我還在學習蟒蛇,所以我非常開放的人評論。如果它們感到厭煩,則在zip()與通過items()的循環之間的差異)。

+1

我不知道性能差異是什麼,但我知道'locals()。items()'返回與zip(locals()。keys(),locals()。values() )''我的假設是'locals()。items()'只需要遍歷'locals()'一次,而'zip'方法需要兩次迭代,一次獲取鍵值和一次獲取值。 – victor