Создать словарь словаря из набора словаря внутри списка - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть такой кортеж,

sample_tuple = ([{1:["hello"], 2: ["this"], 3:["is fun"]},{1:["hi"], 2:["how are you"]}],
                [{1: ["this"], 2:[], 3:["that"]}, {1:[], 2:["yes"]}])

Из этого кортежа я хотел бы создать словарь, в котором ключевые значения имеют значение словаря.

Шаг 1:

Итерация основного большого кортежа и отслеживание индексов списков.

Шаг 2:

Получить в списки внутри кортежа и отслеживать индекс этих больших списков.

то есть, индекс 0 первого списка,

[{1:["hello"], 2: ["this"], 3:["is fun"]},{1:["hi"], 2:["how are you"]}] 

Шаг 3:

Я хочу перебрать ключ и значения словаря внутри списка.

т.е. первый словарь

{1:["hello"], 2: ["this"], 3:["is fun"]}

Шаг 4: При переборе значений словаря я хочу проверить и убедиться, что значения не пустые и не None.

Когда этоПроцесс происходит, я хочу создать словарь.Для этого dictionary,

KEY: индексы step 2 (каждый индекс каждого словаря в большом списке).

ЗНАЧЕНИЯ: словарь, который имеет ключ от ключей step 3 (из моего словаря выше) и значения как (сложная часть) списка, если значение словаря step 3не пустоКак вы можете видеть ниже, у меня есть пустой список temporary_keyword_list, который должен сохранять непустые значения списков во временный список, но я не получаю то, что хочу.

Ниже приведено то, что я пробовал, что яполучить и какой мой желаемый вывод.

output_1 = {}
for index, each_keyword in enumerate(sample_tuple):

    for ind, each_file in enumerate(each_keyword):
        temporary_dict = {}

        for key, value in each_file.items():

            temporary_keyword_list = []
            # Check if a value is not empty or not None
            if value!= [] and value is not None:
                temporary_keyword_list.append(index) ## Here I want to save the index (tricky part)

            # Start inserting values into the dictionary. 
            temporary_dict[key] = temporary_keyword_list

        # Final big dictionary 
        output_1[ind] = temporary_dict  

Мой текущий output_1 словарь:

{0: {1: [1], 2: [], 3: [1]}, 1: {1: [], 2: [1]}}

Желаемый вывод:

{0: {1: [0, 1], 2: [0], 3: [0, 1]}, 1: {1: [0], 2: [0, 1]}}

Так как его кортежи, списки иСловари Я старался изо всех сил, чтобы объяснить мою проблему.Пожалуйста, дайте мне знать в комментарии, если это не имеет смысла, я постараюсь объяснить.Любая помощь или предложение было бы здорово.

1 Ответ

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

Вам, вероятно, не нужно создавать временные списки или словари, поскольку вы можете получить все нужные вам индексы из своих циклов for.Ключевым моментом здесь является то, что ваш начальный кортеж содержит списки, которые имеют похожую структуру, поэтому в вашем коде структура вашего окончательного словаря уже определена после первой итерации первого цикла for.Также рассмотрите возможность использования defaultdict при создании внутренних словарей, так как вы планируете хранить списки внутри них.Тогда все дело в правильной обработке индексов и значений.Код ниже должен работать.

from collections import defaultdict
sample_tuple = ([{1: ["hello"], 2: ["this"], 3: ["is fun"]},
                 {1: ["hi"], 2: ["how are you"]}],
                [{1: ["this"], 2: [], 3: ["that"]}, {1: [], 2: ["yes"]}])
output_1 = {}
for index, each_keyword in enumerate(sample_tuple):
    for ind, each_file in enumerate(each_keyword):
        if index == 0:
            output_1[ind] = defaultdict(list)
        for key, value in each_file.items():
            if value != [] and value is not None:
                output_1[ind][key].append(index)
            print(output_1)

Чтобы ответить на ваш комментарий , вы можете обойтись без defaultdict, но вы действительно хотите это сделать?

sample_tuple = ([{1: ["hello"], 2: ["this"], 3: ["is fun"]},
                 {1: ["hi"], 2: ["how are you"]}],
                [{1: ["this"], 2: [], 3: ["that"]}, {1: [], 2: ["yes"]}])
output_1 = {}
for index, each_keyword in enumerate(sample_tuple):
    for ind, each_file in enumerate(each_keyword):
        for key, value in each_file.items():
            if index == 0:
                if key == 1:
                    if value != [] and value is not None:
                        output_1[ind] = {key: [index]}
                else:
                    if value != [] and value is not None:
                        output_1[ind][key] = [index]
            else:
                if value != [] and value is not None:
                    output_1[ind][key].append(index)
            print(output_1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...