Цикл через текстовый файл и попытка создать вложенный словарь, но словарь печатает только последнюю итерацию цикла, а не полный цикл, вложенный вместе - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь создать вложенный словарь из некоторых циклов for.Если мой код позиционируется так:

    for figure in problem.figures:

        for object in problem.figures[figure].objects:
            attribute_dict_A = {}
            nested_dict = {}

            for k, v in problem.figures[figure].objects[object].attributes.items():
                attribute_dict_A[k] = v
                attribute_dict_A.update({'object': object})

                nested_dict[figure] = attribute_dict_A

        print(nested_dict)

, то в выводе будет показан весь цикл, повторяющийся, как показано ниже:

{'A': {'shape': 'square',' object ':' a ',' fill ':' yes ',' size ':' очень большой '}}

{' B ': {' shape ':' square ',' object':' b ',' fill ':' yes ',' size ':' очень большой '}}

{' C ': {' shape ':' square ',' object ':' c',' fill ':' yes ',' size ':' очень большой '}}

{' 1 ': {' shape ':' pentagon ',' object ':' d ',' fill':' yes ',' size ':' очень большой '}}

{' 2 ': {' shape ':' square ',' object ':' e ',' fill ':' yes',' size ':' очень большой '}}

{' 3 ': {' shape ':' triangle ',' object ':' f ',' fill ':' yes ',' size':' очень большой '}}

{' 4 ': {' shape ':' pac-man ',' object ':' g ',' fill ':' yes ',' size ':'очень большой'}}

{'5': {'shape': 'star', 'object': 'h', 'fill': 'yes', 'size': 'очень большой'}}

{'6': {'shape': 'heart', 'object': 'i', 'fill': 'yes', 'size': 'очень большой'}}

Но если мой код имеет правильный отступОтступ ed (см. 'print(nested_dict)') затем печатает только последнюю итерацию цикла.

Как я могу выполнить цикл для итерации, а также сохранить все, что мне нужно?

for figure in problem.figures:

        for object in problem.figures[figure].objects:
            attribute_dict_A = {}
            nested_dict = {}

            for k, v in problem.figures[figure].objects[object].attributes.items():
                attribute_dict_A[k] = v
                attribute_dict_A.update({'object': object})

                nested_dict[figure] = attribute_dict_A

print(nested_dict)

Мой окончательный вывод выглядит так:

{'6': {'shape': 'heart', 'object': 'i', 'fill': 'yes', 'size': 'очень большой'}}

РЕДАКТИРОВАНИЕ ----

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

nested_dict = {}
attribute_dict = {}

    for figure in problem.figures:

        for object in problem.figures[figure].objects:



            for k, v in problem.figures[figure].objects[object].attributes.items():
                attribute_dict[k] = v
                attribute_dict.update({'object': object})

        nested_dict[figure] = attribute_dict

    pprint(nested_dict)

Вот пример текстового файла, который я перебираю:

Заглавная буква A - это цифра, строчная a - это объект, k, v - атрибутпара

A
    a
        shape:circle
        size:very large
        fill:no
    b
        shape:plus
        size:small
        fill:yes
        angle:0
       inside:a
B
    c
        shape:circle
        size:very large
        fill:no
    d
        shape:plus
        size:small
        fill:yes
        angle:0
        inside:c
C
    e
        shape:circle
        size:very large
        fill:no
    f
        shape:plus
        size:small
        fill:yes
        angle:0
        inside:e

1 Ответ

0 голосов
/ 20 сентября 2018

Ваша итерация затем создает словарь, так что при каждой итерации создается новый пустой dict, поэтому выведите nested_dict из цикла:

nested_dict = {}
for figure in problem.figures:

        for object in problem.figures[figure].objects:
            attribute_dict_A = {}

            for k, v in problem.figures[figure].objects[object].attributes.items():
                attribute_dict_A[k] = v
                attribute_dict_A.update({'object': object})

                nested_dict[figure] = attribute_dict_A

print(nested_dict)

Кстати, возможно, следует также изменить положение attribute_dict_A:

attribute_dict_A = {}
nested_dict = {}
for figure in problem.figures:

        for object in problem.figures[figure].objects:

            for k, v in problem.figures[figure].objects[object].attributes.items():
                attribute_dict_A[k] = v
                attribute_dict_A.update({'object': object})

                nested_dict[figure] = attribute_dict_A

print(nested_dict)
...