如何通过列表理解或其他方式将一个列表分成两个

fra*_*cis 1 python list-comprehension list

如果有一个字典项列表,如下所示:

L = [{"a":1, "b":0}, {"a":3, "b":1}...]
Run Code Online (Sandbox Code Playgroud)

我想根据"b"的值(0或1)拆分这些条目.

A(b=0) = [{"a":1, "b":1}, ....]
B(b=1) = [{"a":3, "b":2}, .....]
Run Code Online (Sandbox Code Playgroud)

我很熟悉使用简单的列表推导,我目前正在循环列表L两次.

A = [d for d in L if d["b"] == 0]
B = [d for d in L if d["b"] != 0]
Run Code Online (Sandbox Code Playgroud)

显然,这不是最有效的方式.

在列表推导功能中似乎没有else子句.

我能通过列表理解做我想做的事吗?

有一个更好的方法吗?

我正在寻找可读性和效率之间的良好平衡,倾向于可读性.

谢谢!

更新:感谢大家的意见和想法!对我来说最容易阅读的是托马斯的那篇.但我也会看看亚历克斯的建议.我以前没有找到任何对集合模块的引用.

Tho*_*ers 5

不要使用列表理解.列表推导适用于您想要单个列表结果的时间.你显然不这样做:)使用常规for循环:

A = []
B = []
for item in L:
    if item['b'] == 0:
        target = A
    else:
        target = B
    target.append(item)
Run Code Online (Sandbox Code Playgroud)

举个例子,你可以缩短片段(A, B)[item['b'] != 0].append(item),但为什么要这么麻烦?