我正在尝试在字典中定义另一个维度:
def skidoo():
dingo ={}
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), "FORWARD")
for rule in chain.rules:
ipaddr2 = rule.dst.split("/")
dingo[ipaddr2[0]]={}
checkdom = open('/usr/local/ipt.log')
for row in csv.reader(checkdom):
if row[1] == ipaddr2[0]:
namey = row[0]
dingo[ipaddr2[0]]= namey
dingo[ipaddr2[0]][namey]= row[2]
return dingo
我从iptables中获取ips,然后在csv中搜索该ip,并将其写入dict。到目前为止都很好。但是,我似乎无法将内容分配给额外的“名称”维度。
我认为可能是因为我在方括号内,所以我尝试了[ipaddr2[0]][namey]
和[[ipaddr2[0]][namey]]
我得到:
TypeError: list indices must be integers, not str
或:
TypeError: 'str' object does not support item assignment
我已将它初始化,因此它知道它是dist中的一个字典(我认为)。有什么想法吗?
答案 0 :(得分:0)
dingo[ipaddr2[0]]= namey
dingo[ipaddr2[0]][namey]= row[2]
这怎么可行?
当第二行执行时,dingo[ipaddr2[0]]
等于namey
是一个字符串,所以:
您使用字符串(namey
)作为索引 - 错误
访问同一字符串内的位置(namey
) - 错误
并在该位置分配另一个字符串(row[2]
) - 错误
如果您真正想要的是嵌套字典,您应该执行以下操作:
dingo[ipaddr2[0]]= dict()
现在你可以使用namey作为这个新词典的关键词:
dingo[ipaddr2[0]][namey] = row[2]