在python中定义维度字典

时间:2014-10-20 11:52:45

标签: python dictionary

我正在尝试在字典中定义另一个维度:

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中的一个字典(我认为)。有什么想法吗?

1 个答案:

答案 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]