蟒蛇。将列表中的字典组合在一起,在列表中创建字典列表

时间:2016-02-11 12:17:42

标签: python dictionary

我有一个包含多个词典的列表。我不需要这些词典中的一些。最后,我希望所有的词典都有关键的开头'在他们中。而且,我想要用“开始”这个词来开始'在它们组合在一起(在一个列表中),每次一个带有'start'的序列(或者只有一次'start')它们被一个dict打断而没有' start'在其中,创建了包含“开始”词典的下一个列表,依此类推。

[{'key_one': ‘value_one’, 'key_two': 'value_two'},
{'num': ‘1’, 'start': 's1’},
{'num': ‘2’, 'start': 's2’},
{'num': '3, 'start': 's3’},
{'num': '4', 'start': 's4’},
{'num': '5, 'start': ‘s5’},
{'num': '6, 'start': 's6’},
{'num': '7', 'start': 's7’ },
{'num': '8', 'start': 's8’},
{'num': '9', 'start': 's9’},
{'num': '10', 'start': 's10’},
{'key_one': ‘value_one’, 'key_two': 'value_two'},
{'num': '11', 'start': 's11’},
{'num': '12', 'start': 's12’},
{'num': '13', 'start': 's13’},
{'num': '14', 'start': 's14’},
{'num': '15', 'start': 's15’},
{'key_one': ‘value_one’, 'key_two': 'value_two'},
{'num': '16', 'start': 's16’},
{'num': '17', 'start': 's17},
{'num': '18', 'start': 's18}]

所以在这个例子中,输出应该是:

[[{'num': ‘1’, 'start': 's1’},
{'num': ‘2’, 'start': 's2’},
{'num': '3, 'start': 's3’},
{'num': '4', 'start': 's4’},
{'num': '5, 'start': ‘s5’},
{'num': '6, 'start': 's6’},
{'num': '7', 'start': 's7’ },
{'num': '8', 'start': 's8’},
{'num': '9', 'start': 's9’},
{'num': '10', 'start': 's10’}]

[{'num': '11', 'start': 's11’},
{'num': '12', 'start': 's12’},
{'num': '13', 'start': 's13’},
{'num': '14', 'start': 's14’},
{'num': '15', 'start': 's15’}]

[{'num': '16', 'start': 's16’},
{'num': '17', 'start': 's17},
{'num': '18', 'start': 's18}]]

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

让我们将您的原始词典列表定义为L,并将所需的最终结果(词典列表列表)定义为Rsub_list是用于收集块的临时列表:

R = []
sub_list = []
for d in L:
    if 'start' in d:
        sub_list.append(d)
    else:
        if sub_list:
            R.append(sub_list)
            sub_list = []
print R

附加条件if sub_list:还可确保您的sub_list中永远不会有空R

干杯

答案 1 :(得分:0)

old_list = [{'key_one': 'value_one', 'key_two': 'value_two'}, {'num': '1', 'start': 's1'}, {'num': '2', 'start': 's2'}, {'num': '3', 'start': 's3'}, {'num': '4', 'start': 's4'}, {'num': '5', 'start': 's5'}, {'num': '6', 'start': 's6'}, {'num': '7', 'start': 's7' }, {'num': '8', 'start': 's8'}, {'num': '9', 'start': 's9'}, {'num': '10', 'start': 's10'}, {'key_one': 'value_one', 'key_two': 'value_two'}, {'num': '11', 'start': 's11'}, {'num': '12', 'start': 's12'}, {'num': '13', 'start': 's13'}, {'num': '14', 'start': 's14'}, {'num': '15', 'start': 's15'}, {'key_one': 'value_one', 'key_two': 'value_two'}, {'num': '16', 'start': 's16'}, {'num': '17', 'start': 's17'}, {'num': '18', 'start': 's18'}]
new_list = [[]]
for dictionary in new_list:
    if 'start' in dictionary.keys():
        new_list[-1].append(dictionary)
    elif new_list[-1]:
        new_list.append([])
new_list = new_list[:-1]