从列表中的字典元组创建字典字典

时间:2018-11-13 00:37:29

标签: python list dictionary tuples

我有一个这样的元组,

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

step 2

KEY:索引(大列表中每个词典的每个索引)。

VALUES:字典,该字典具有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 :(得分:1)

您可能不需要在此处创建临时列表或字典,因为您可以从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)