【问题标题】:Iterate through a dictionary inside a for loop遍历 for 循环内的字典
【发布时间】:2023-03-18 19:55:01
【问题描述】:

我正在尝试在 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'}

有什么建议吗?

【问题讨论】:

    标签: python loops dictionary nested


    【解决方案1】:

    在您的for-loop 中,您有以下几行

    for element in input_site:
        i=0 # <---
        print(list(new_site.values())[i])
        i+=1
    

    在每次迭代中将 i 赋值为 0,然后打印 list(new_site.values()) 的第 i 个元素,然后将其值加一。
    下一次迭代也会发生同样的情况。
    所以,要修复它,i 应该移到循环之外。

    【讨论】:

    • 谢谢,我把 i=0 放在 for 循环之前。
    【解决方案2】:

    除了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 时,您只是传递了函数本身。这真的是你想要的吗?您需要调用对象上的函数以获取其类型。

    我建议您查看材料,或找一位导师向您解释代码的每个部分的作用。提前准备一些问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-20
      • 2011-03-18
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      相关资源
      最近更新 更多