在字典的特定键出现后将字典拆分成子列表

vis*_*abu 6 python dictionary list

我有词典列表.这些词典基本上只有一个键值.

例如:

lst = [{'x': 23}, {'y': 23432}, {'z': 78451}, {'a': 564}, {'x': 45},
       {'y': 7546}, {'a': 4564}, {'x': 54568}, {'y': 4515}, {'z': 78457}, 
       {'b': 5467}, {'a': 784}]
Run Code Online (Sandbox Code Playgroud)

我试图lst在每次出现具有特定键的字典后将字典列表划分为子列表"a".

我尝试使用我在互联网上看到的其他方式,但由于我是python的新手,我无法理解它们并获得理想的结果.我希望最终结果如下:

final_lst = [
    [{'x': 23}, {'y': 23432}, {'z': 78451}, {'a': 564}],
    [{'x': 45}, {'y': 7546}, {'a': 4564}],
    [{'x': 54568}, {'y': 4515}, {'z': 78457}, {'b': 5467}, {'a': 784}]],
]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

您可以使用在满足条件时收集元素和产量的生成器:

def split_by_key(lst, key):
    collected = []
    for d in lst:
        collected.append(d)
        if key in d:
            yield collected
            collected = []
    if collected:  # yield any remainder
        yield collected

final_lst = list(split_by_key(lst, 'a'))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> lst = [{'x': 23}, {'y': 23432}, {'z': 78451}, {'a': 564}, {'x': 45},
...        {'y': 7546}, {'a': 4564}, {'x': 54568}, {'y': 4515}, {'z': 78457},
...        {'b': 5467}, {'a': 784}]
>>> list(split_by_key(lst, 'a'))
[[{'x': 23}, {'y': 23432}, {'z': 78451}, {'a': 564}], [{'x': 45}, {'y': 7546}, {'a': 4564}], [{'x': 54568}, {'y': 4515}, {'z': 78457}, {'b': 5467}, {'a': 784}]]
>>> pprint(_)
[[{'x': 23}, {'y': 23432}, {'z': 78451}, {'a': 564}],
 [{'x': 45}, {'y': 7546}, {'a': 4564}],
 [{'x': 54568}, {'y': 4515}, {'z': 78457}, {'b': 5467}, {'a': 784}]]
Run Code Online (Sandbox Code Playgroud)