遍历for循环内的字典

时间:2018-09-12 00:47:13

标签: python loops dictionary nested

我正在尝试在for循环中打印字典的值,目前这就是我得到的:

    Site 1
    {'Port': '1/0/2', 'Link-Status': 'Up', 'Vlans': '81,1001,1101,1301,1303'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '1007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '30,31,81,82'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '30,31,81,82,1001,1101'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '1007'}
    Site 1
    {'Port': '1/0/2', 'Link-Status': 'Up', 'Vlans': '82,1301,2001,2101'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '2007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '30,31,81,82'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '30,31,81,82,1301,2001,2101'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '2007'}
    Site 1
    {'Port': '1/0/2', 'Link-Status': 'Up', 'Vlans': '1006,1102'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '1007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '20,21'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '20,21,1006,1102'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '1007'}
    Site 1
    {'Port': '1/0/2', 'Link-Status': 'Down', 'Vlans': '2006,2102'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '2007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '20,21'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '20,21,2006,2102'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '2007'}

我曾尝试为for循环中的值编制索引,但是我还没有走运:

    def main():
        input_site = new_site.keys()
        print(new_site.values())
        for element in input_site:
            i=0
            print(list(new_site.values())[i])
            i+=1
            processInput(element,type)

这是我字典的内容:

    print(new_site.values())
    dict_values(['Site 1', 'Site 3', 'Site 7', 'Site 9'])

这是我的目标:

    Site 1
    {'Port': '1/0/2', 'Link-Status': 'Up', 'Vlans': '81,1001,1101,1301,1303'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '1007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '30,31,81,82'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '30,31,81,82,1001,1101'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '1007'}
    Site 3
    {'Port': '1/0/2', 'Link-Status': 'Up', 'Vlans': '82,1301,2001,2101'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '2007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '30,31,81,82'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '30,31,81,82,1301,2001,2101'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '2007'}
    Site 7
    {'Port': '1/0/2', 'Link-Status': 'Up', 'Vlans': '1006,1102'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '1007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '20,21'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '20,21,1006,1102'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '1007'}
    Site 9
    {'Port': '1/0/2', 'Link-Status': 'Down', 'Vlans': '2006,2102'}
    {'Port': '1/0/4', 'Link-Status': 'Down', 'Vlans': '2007'}
    {'Port': '1/0/11', 'Link-Status': 'Up', 'Vlans': '20,21'}
    {'Port': '1/0/13', 'Link-Status': 'Up', 'Vlans': '20,21,2006,2102'}
    {'Port': '1/0/14', 'Link-Status': 'Up', 'Vlans': '2007'}

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

0内,您有以下几行

for-loop

在每次迭代中,您将i分配为0,然后打印for element in input_site: i=0 # <--- print(list(new_site.values())[i]) i+=1 的第i个元素,然后将其值增加1。
下一次迭代也会发生同样的情况。
因此,要解决此问题,list(new_site.values())应该移到循环之外。

答案 1 :(得分:0)

除了i=0问题外,for循环还存在一些主要问题:

for element in input_site:
    print(list(new_site.values())[i])
    i+=1
    processInput(element,type)
  • 每次迭代时,您都复制整个值列表,以访问单个元素。
  • elementnew_site字典中的键。有一些方法可以要求与键关联的值。越过the tutorialthe documentation进入dict
  • 遍历字典时,如果既需要键又要使用值,则应使用.items(),而不要使用.keys()。示例代码:

    for key, value in d.items():
        ...
    
  • 当您将type传递给processInput时,您正在传递名为type的函数。 type是一个函数,它接收一个对象并告诉您它具有什么类型。但是,当您传递type时,您只是在传递函数本身。那真的是你想要的吗?您需要调用对象上的函数以获取其类型。

我建议您复习材料,或找一位导师向您解释代码各部分的作用。事先准备一些问题。