【问题标题】:Iteration loop through nested dictionary - stoping at second通过嵌套字典的迭代循环 - 停在第二个
【发布时间】:2018-03-23 17:35:49
【问题描述】:

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

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”时会出现问题...... 你能帮帮我吗?

【问题讨论】:

  • komorka = "{}{}".format(kolumna, wiersz) 是不必要的 openpyxl 提供了一个用于访问单元格的编程接口。请仔细阅读官方文档中的介绍。

标签: python dictionary for-loop iteration openpyxl


【解决方案1】:
materialproduction[key1][key2] = value 

将尝试查找 materialproduction[key1] 的值,然后将 key2-value 对添加到该结果中。然而,“2”并不是物质生产中存在的关键。所以你会在查找时得​​到一个 KeyError。

您需要为每个 licznik 键添加一个字典。例如在 materialproduction[licznik][liczkolumny] = wartosckomorki 之前添加以下内容:

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

更简洁的方法是使用默认字典:

from collections import defaultdict

materialproduction = defaultdict(dict)

如果键不存在,将使用字典作为结果,而不是错误,这就是您所追求的。

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2020-04-08
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多