迭代循环通过嵌套字典 - 在第二个停止

时间:2017-10-11 22:21:57

标签: python dictionary for-loop iteration openpyxl

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

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])

Loop应该像这样制作字典: materialproduction [1] [1] 。 。 。 materialproduction [1] [9] materialproduction [2] [1] 。 。 。 materialproduction [2] [9]

等,但是当“licznik”(第一阶段)将数量增加到“2”时有问题... 你能救我吗?

1 个答案:

答案 0 :(得分:0)

materialproduction[key1][key2] = value 

将尝试查找materialproduction [key1]的值,然后将key2值对添加到该结果中。然而,'2'不是物质生产中存在的关键。因此,您将在该查找中获得KeyError。

您需要做的是为每个licznik密钥添加字典。例如,在materialproduction [licznik]之前添加以下内容[liczkolumny] = wartosckomorki:

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

更简洁的方法是使用defaultdict:

from collections import defaultdict

materialproduction = defaultdict(dict)

如果一个密钥不存在,那么将使用字典而不是错误字典作为结果,这就是你所追求的。