2011-12-21 18 views
0
#!/usr/bin/python -tt 

# A dictionary Of Each New SSID 
WirelessNetwork = {} 
WirelessNetwork['name'] = 'baz' 
WirelessNetwork['type'] = 'bar' 
WirelessNetwork['pass'] = 'foo' 

# A list of all SSIDs 
networkAddList = (WirelessNetwork) 

def addWireless(passedDict={}): 
    print 'Adding SSID: %s' % passedDict['name'] 
    print 'Of type: %s' % passedDict['type'] 
    print 'With Password: %s' % passedDict['pass'] 

for networkDict in networkAddList: 
    addWireless(networkDict) 

所以我有一個列表「networkAddList」充滿了字典, 「無線網絡」。 我想要遍歷該列表「爲networkDict在networkAddList」 並通過字典本身我的功能「addWireless」迭代字典的一個元組,並將嵌套字典傳遞給一個函數

當我運行上面的示例代碼,我得到以下錯誤:

TypeError: 'string indices must be integers, not str' 

哪讓我覺得Python認爲passedDict是一個字符串,因此認爲我想要字符串索引,即0或者其他東西,而不是鍵名稱。我是python的新手,但我將不得不做很多事情,所以我希望有人能夠指出我正確的方向,因爲我認爲它非常簡單。但我無法改變基本的想法,即字典清單。

+0

不要寫「[update:tuple]」只需修復它。這個問題必須獨立。 StackOverflow保存更改的歷史記錄。變化的歷史並不重要。請把問題解決爲**正確**。忽略任何歷史參考。正確和完整對其他人有用。改變歷史並不是非常有用。 – 2011-12-21 21:40:21

+0

我明白你的觀點,將標題更新爲原來的標題。 – acidprime 2011-12-22 05:15:09

+0

恢復它使它不再正確。你正在創建一個字典的元組。請修復這個問題來說'元組'。不是'[update:tuple]'。只是元組,因爲這是你使用的語法。除非問題是「爲什麼不用'()'定界列表?」在這種情況下,請問。 – 2011-12-22 11:36:58

回答

2

當蟒蛇調試可以確認你的懷疑,價值傳遞是字符串類型功能:

print type(passedDict) 

當您創建一個元素的元組時,您需要一個tra iling「,」。另請注意,元組與python中的列表不同。主要區別在於元組是不可變的,列表不是。

#!/usr/bin/python -tt 

# A dictionary Of Each New SSID 
WirelessNetwork = {} 
WirelessNetwork['name'] = 'baz' 
WirelessNetwork['type'] = 'bar' 
WirelessNetwork['pass'] = 'foo' 

# A list of all SSIDs 
networkAddList = (WirelessNetwork,) 

def addWireless(passedDict={}): 
    print 'Adding SSID: %s' % passedDict['name'] 
    print 'Of type: %s' % passedDict['type'] 
    print 'With Password: %s' % passedDict['pass'] 

for networkDict in networkAddList: 
    addWireless(networkDict) 
+0

感謝給你簡潔的回答,提示和示例代碼,我決定選擇這個作爲答案,但我想在線程中提到其他人也得出了同樣的結論。感謝您幫助解決語法錯誤。 – acidprime 2011-12-21 21:34:32

0

這不是一個名單,是用逗號本身的價值

# A list of all SSIDs 
networkAddList = (WirelessNetwork) 

成爲一個列表

# A list of all SSIDs 
networkAddList = (WirelessNetwork,) 
+1

嗯,這是一個元組而不是列表。 Singleton列表('[foo]')工作得很好,沒有拖尾逗號,就像使用2+元素的元組一樣。 – delnan 2011-12-21 18:45:15

+0

元組是一個不可變列表,但仍是對象列表 – fabrizioM 2011-12-21 18:55:41

+0

「元組」是「元組」而不是「列表」。它們都是序列,主要因其可變性而異,但這並不能使它們等同。甚至沒有遠程。當然,他們可能會足夠相似,被非正式地歸爲「列表」,但特別是在這裏,我們應該是精確的。 – delnan 2011-12-21 18:57:32

0

其實它不是一個列表,即使用逗號。它是一個不可變的元組。如果您的代碼稍後想要添加任何內容,我會提出這個問題。

networkAddList = [WirelessNetwork] # or, list(WirelessNetwork) 
+0

謝謝,我其實不需要改變,所以我想我會堅持一個元組 – acidprime 2011-12-21 21:23:34

-1

剛跑到類型的快速檢查被引用,而且我相信你只是缺少一個頓號(在無線網絡)。

因此,您的代碼會是這個樣子:

networkAddList = (WirelessNetwork,)

您的循環便會正確遍歷字典。

+0

它的全部錯誤。至少在他重複字典並傳遞至少密鑰之前。現在你的代碼只是遍歷按鍵並傳遞單個字符。 – Abhijit 2011-12-21 18:56:40

+0

你說得對 - 看起來這不是一個很好的解決方案。然後給我約十分鐘的時間來修改它。 – Makoto 2011-12-21 19:00:34