遍历字典元组并将嵌套字典传递给函数

0 投票
4 回答
2139 浏览
提问于 2025-04-17 08:48
#!/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)

撰写回答