Словарь не обновляется в соответствии с полным словарем, но только последний элемент - PullRequest
0 голосов
/ 20 ноября 2018

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

Пример текстового файла:

Text1.txt:

У меня есть много вещей, которые я мужчина Король джунглей

Text2.txt:

Джунгли человека Нет джунглей нет жизни Твоя жизнь бесполезна

Мои итоги возвращаются из другого класса:

Итоги:

[[["I have many things", "I am a man", "King of Jungle"]], [["The jungle of man", "No jungle no life", "Your life is useless"]]]

class Get(object):
    def __init__(self):
        pass

    def get_folder(self, totals=None):
        """
        Return the dictionary for sentence based on the index of folder and files
        """
        if totals is None:
            totals = self.get_files() #This is based on my another class on another file.py
        self.record = {i:{ii:totals[i][ii][iii]} for i in range(len(totals)) for ii in range(len(totals[i])) for iii in range(len(totals[i][ii]))}
        print(self.record)

Мой текущий вывод при печати (self.record):

{0: {0: 'King of jungle'}, 1: {0: 'Your life is useless'}}

Ожидаемый вывод:

{0: {0: 'I have many things', 0: 'I am a man', 0: 'King of jungle'}, 1: {0: 'The jungle of man', 0: 'No jungle no life', 0: 'Your life is useless'}}

1 Ответ

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

Я не уверен, что ваш ожидаемый результат - правильный словарь Python.Можете ли вы проверить это?Также у вас есть список из списка списков строк.Это то, что вы хотите?

В качестве примера вложенных словарей, пожалуйста, рассмотрите фрагмент ниже.

values = [['a', 'b', 'c'], ['d', 'e', 'f']]
dict = {}
for i, j in enumerate(values):
    dict[i] = {}
    for k, l in enumerate(j):
        dict[i][k] = l
print(dict)
# {0: {0: 'a', 1: 'b', 2: 'c'}, 1: {0: 'd', 1: 'e', 2: 'f'}}

Альтернативное решение

from collections import defaultdict
values = [['a', 'b', 'c'], ['d', 'e', 'f']]
dict = {}
for i, j in enumerate(values):
    dict[str(i)] = defaultdict(list)
    for k in j:
        dict[str(i)][0].append(k)
print(dict)
# {'0': defaultdict(<class 'list'>, {0: ['a', 'b', 'c']}),
#  '1': defaultdict(<class 'list'>, {0: ['d', 'e', 'f']})}

В качестве словарного понимания

print({i: {k: l for k, l in enumerate(j)} for i, j in enumerate(values)})
# {0: {0: 'a', 1: 'b', 2: 'c'}, 1: {0: 'd', 1: 'e', 2: 'f'}}

Последнее решение самое быстрое.

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