代码之家  ›  专栏  ›  技术社区  ›  Kris

通过嵌套字典的迭代循环-秒停止

  •  0
  • Kris  · 技术社区  · 7 年前

    我想了2个小时,我不知道为什么会出现错误。 错误表示循环无法找到字典的第二阶段。

    from openpyxl import load_workbook
    book = load_workbook('OBS.xlsx')
    zakladkaall = book.get_sheet_by_name('ALL')
    
    licznik = 1
    liczkolumny = 1
    
    materialproduction = {
        licznik : {liczkolumny : ""}
    }
    
    for wiersz in range(2, zakladkaall.max_row):
        for kolumna in "ABCDEFGHI":
            komorka = "{}{}".format(kolumna, wiersz)
            wartosckomorki = zakladkaall[komorka].value
            materialproduction[licznik][liczkolumny] = wartosckomorki
    
            if liczkolumny < 9:
                liczkolumny += 1
                print(licznik)
                print(liczkolumny)
            else:
                liczkolumny = 1
                licznik += 1
                print(licznik)
    
    print(materialproduction[licznik][liczkolumny])
    

    材料生产[1][1] . . . 材料生产[1][9] 材料生产[2][1] . . . 材料生产[2][9]

    等等,但当“licznik”(第一阶段)的数量增加到“2”时就会出现问题。。。 你能帮助我吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   blueenvelope    7 年前
    materialproduction[key1][key2] = value 
    

    将尝试查找materialproduction[key1]的值,然后将key2值对添加到该结果中。然而,“2”不是材料生产中存在的关键。因此,您将在该查找中得到一个键错误。

    if liczkolumny == 1:
        materialproduction[licznik] = {}
    

    一种更简洁的方法是使用defaultdict:

    from collections import defaultdict
    
    materialproduction = defaultdict(dict)
    

    如果一个键不存在,结果将使用字典,而不是出错,这正是您所追求的。