遍历字典元组并将嵌套字典传递给函数
#!/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”的列表,里面全是字典,也就是“WirelessNetwork”。我想遍历这个列表,使用“for networkDict in networkAddList”,然后把每个字典传递给我的函数“addWireless”。
当我运行上面的示例代码时,我遇到了以下错误:
TypeError: 'string indices must be integers, not str'
这让我觉得Python把传递的字典当成了字符串,所以它认为我想用字符串的索引,比如0之类的,而不是用键'name'。我刚开始学Python,但我需要经常做这种事情,所以希望有人能给我指条明路,因为我觉得这很简单。不过我不能改变基本的想法,也就是一个字典的列表。
4 个回答
0
这不是一个列表,而是它本身的值。
# A list of all SSIDs
networkAddList = (WirelessNetwork)
加上逗号就变成一个列表了。
# A list of all SSIDs
networkAddList = (WirelessNetwork,)
0
其实这不是一个列表,即使有逗号。它是一个元组,元组是不可改变的。我提到这个是为了防止你后面的代码想要往里面添加东西。
networkAddList = [WirelessNetwork] # or, list(WirelessNetwork)
2
在调试Python代码时,你可以用type这个函数来确认你怀疑的值是不是字符串。
print type(passedDict)
当你创建一个只有一个元素的元组时,需要在元素后面加一个逗号。另外,元组和列表在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)