Обход нескольких списков в нескольких словарях - PullRequest
0 голосов
/ 09 января 2019

Хорошо, я знаю, что есть несколько подобных вопросов, но не повезло. У меня есть (2) для циклов с оператором while внутри внутреннего цикла for и 2 словарей со списком в качестве значений. Что я хочу сделать, так это получить новый ключ и выполнить некоторые вычисления, войти во второй цикл, подсчитать количество элементов во втором списке значений словаря, выполнить цикл по этим значениям списка, используя информацию из первого цикла, чтобы выполнить некоторые вычисления, как только все значения имеют были прочитаны для этого ключа, вернуться к первому циклу, получить следующий ключ и так далее. Количество ключей для каждого словаря всегда будет одинаковым. Длина v для второго приговора будет изменяться, например, в первый раз через второй цикл for значение counterlist [1] должно быть 9, но, как показано в приведенных ниже результатах, учитывается только значение 4, которое является числом значений в первом для петля. На самом деле второй цикл For считает только 4 для каждого времени вместо истинного значения длины v. Если я включу ключ во второй цикл for, такой как для k, v, во seconddict.items (), он будет правильно рассчитываться, но потом я получаю проблему, когда при каждом входе во второй цикл for он начинается с первого k и дублирует все мои результаты с каждым проходом. Могу ли я получить совет по выполнению этой работы?

def opti(self, firstdict, seconddict):
    self.firstdict=firstdict
    self.seconddict=seconddict
    for key, value in self.firstdict.items():
        print('****NEW KEY AND DO OTHER STUFF****)
        for v in self.seconddict[key]:
            print(---INSDIE SECOND DICT---')
            x=0
            counterlist=[key, len(list(filter(None, v)))]
            while x < couterlist[1]:
                x+=1
                print(x)
                if x >= counterlist[1]:
                    if key in finaldict:
                        print('====SAVE HERE===')
                    else:
                        print('SOMETHING ELSE')
                    break
                else:
                    continue
        break   





 **CURRENT RESULTS:**
    *********************NEW RUN*******************
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  3
    1
    2
    3
    ======SOMETHING ELSE======
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  3
    1
    2
    3
    ======SOMETHING ELSE======
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  3
    1
    2
    3
    ======SOMETHING ELSE======
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  3
    1
    2
    3
    ======SOMETHING ELSE======

   **NEEDED RESULTS:**
    *********************NEW RUN*******************
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  9
    1
    2
    3
    4
    5
    6
    7
    8
    ======SOMETHING ELSE======
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  2
    1
    ======SOMETHING ELSE======
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  5
    1
    2
    3
    4
    ======SOMETHING ELSE======
    *********NEW KEY***********  SIZE   4
    RAW DICT SIZE  4
    ------INSIDE RAWDICT---------   COUNTERLIST SIZE  3
    1
    2
    3
    ======SOMETHING ELSE======

1 Ответ

0 голосов
/ 09 января 2019

Ну, немного посмотрев, я использовал контрлист, который я использовал в другом разделе кода. Изменив это на следующее, я смог заставить его работать. Это может быть полезно для других, использующих список в качестве пар ключ-значение в словарях для подсчета количества значений внутри каждого из них.

length_dict = {key: len(v) for key, v in self.rawdict.items()}
            length_key = length_dict[key]
            counterlist=length_key
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...