2011-12-21 39 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