迭代一个字典元组并将嵌套的字典传递给一个函数

时间:2011-12-21 18:40:39

标签: python list dictionary tuples enumeration

#!/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”,里面装满了字典,即。 “无线网络”。 我想迭代该列表“for networkDict in networkAddList” 并将字典本身传递给我的函数“addWireless”

当我运行上面的示例代码时,我收到以下错误:

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

这让我觉得python认为passDict是一个字符串,因此认为我想要字符串索引,即0或者其他东西而不是键'name'。我是python的新手,但我将不得不做很多这样的事情所以我希望有人可以指出我正确的方向,因为我认为它非常简单。但我无法改变基本思想,即词典列表。

4 个答案:

答案 0 :(得分:2)

在python中调试时,你可以确认你怀疑传递的值是一个类型为function的字符串:

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)

答案 1 :(得分:0)

这不是一个列表,是值本身

# A list of all SSIDs
networkAddList = (WirelessNetwork)

用逗号成为列表

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

答案 2 :(得分:0)

实际上它不是一个列表,即使是逗号。它是一个元组,是不可变的。我提出这个问题,以防您的代码想要在以后添加任何内容。

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

答案 3 :(得分:-1)

只是快速检查所引用的类型,我相信你只缺少一个串行逗号(在WirelessNetwork中)。

所以,你的代码看起来像这样:

networkAddList = (WirelessNetwork,)

然后你的for循环将正确地迭代字典。