Python. Проблема добавления значений во вложенные словари из цикла for - PullRequest
0 голосов
/ 09 марта 2020

Я думаю, у меня есть два вопроса. Во-первых, «это путь, по которому я иду ниже верного пути, и если нет, то что мне делать?» а второй - «как перестать перезаписывать значения».

В приведенном ниже коде, как сделать так, чтобы вывод «monthdict» совпадал с «report»?

Report - это список значения, в которых (например) январь неделя 1 понедельник выпекает 1, а февраль неделя 1 выпекает понедельник - 31. Когда я пытаюсь воссоздать его программно, он делает ВСЕ хлебы 53.

При использовании в реальном мире реальные данные поступают в из API, что я могу только 7 пунктов одновременно. Так что мне нужно позвонить Яну 1-й неделе в понедельник, 1-й неделе во вторник, 1-й неделе по порядку, 1-й неделе понедельника и т. Д. c. повторно и вернуть значения

report = {
    "january" : {
        "week1" : {
            "monday" : {
                 "bread" : 1,
                 "cheese" : 2,
                 "milk" : 3
                 },
            "tueday" : {
                 "bread" : 4,
                 "cheese" : 5,
                 "milk" : 6
                 },
            "wednesday" : {
                 "bread" : 7,
                 "cheese" : 8,
                 "milk" : 9
                 },
        },
        "week2" : { 
            "monday" : {
                 "bread" : 11,
                 "cheese" : 12,
                 "milk" : 13
                 },
            "tueday" : {
                 "bread" : 14,
                 "cheese" : 15,
                 "milk" : 16
                 },
            "wednesday" : {
                 "bread" : 17,
                 "cheese" : 18,
                 "milk" : 19
                 },
        },
        "week3" : { 
            "monday" : {
                 "bread" : 21,
                 "cheese" : 22,
                 "milk" : 23
                 },
            "tueday" : {
                 "bread" : 24,
                 "cheese" : 25,
                 "milk" : 26
                 },
            "wednesday" : {
                 "bread" : 27,
                 "cheese" : 28,
                 "milk" : 29
                 },
        },
    },
    "february" : {
        "week1" : { 
            "monday" : {
                 "bread" : 31,
                 "cheese" : 32,
                 "milk" : 33
                 },
            "tueday" : {
                 "bread" : 34,
                 "cheese" : 35,
                 "milk" : 36
                 },
            "wednesday" : {
                 "bread" : 37,
                 "cheese" : 38,
                 "milk" : 39
                 },
        },
        "week2" : { 
            "monday" : {
                 "bread" : 111,
                 "cheese" : 112,
                 "milk" : 113
                 },
            "tueday" : {
                 "bread" : 114,
                 "cheese" : 115,
                 "milk" : 116
                 },
            "wednesday" : {
                 "bread" : 117,
                 "cheese" : 118,
                 "milk" : 119
                 },
        },
        "week3" : { 
            "monday" : {
                 "bread" : 121,
                 "cheese" : 122,
                 "milk" : 123
                 },
            "tueday" : {
                 "bread" : 124,
                 "cheese" : 125,
                 "milk" : 126
                 },
            "wednesday" : {
                 "bread" : 127,
                 "cheese" : 128,
                 "milk" : 129
                 },
        }
    }
}

print("\nreport:\n", report, "\n\n")

months = ["january", "february"]
weeks = ["week1", "week2", "week3"]
days = ["monday", "tuesday", "wednesday"]
food = ["bread", "cheese", "milk"]
values = []

for i in range(1,129):
    values.append(i)

x = 0

fooddict = {}
daydict = {}
weekdict = {}
monthdict= {}

for m in months:
    for w in weeks:
        for d in days:
            for f in food:
                fooddict[f] = values[x]
                x += 1
                print(x, ") adding ", values[x], " to ", f)
            daydict[d] = fooddict
        weekdict[w] = daydict
    monthdict[m] = weekdict

print(monthdict)

1 Ответ

0 голосов
/ 09 марта 2020

Попробуйте это

monthdict= {}
for m in months:
    weekdict = {}
    for w in weeks:
        daydict = {}
        for d in days:
            fooddict = {}
            for f in food:
                fooddict[f] = values[x]
                x += 1
                print(x, ") adding ", values[x], " to ", f)
            daydict[d] = fooddict
        weekdict[w] = daydict
    monthdict[m] = weekdict

В противном случае вы делитесь значениями из предыдущего месяца, недели и дня (вместо этого они должны начинаться как пустые для каждой новой итерации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...