Skip to main content
 首页 » 编程设计

python之如何通过列表理解或其他方式将一个列表一分为二

2025年05月04日12lidabo

如果有一个像这样的字典项目列表:

L = [{"a":1, "b":0}, {"a":3, "b":1}...] 

我想根据“b”的值(0 或 1)拆分这些条目。

A(b=0) = [{"a":1, "b":1}, ....] 
B(b=1) = [{"a":3, "b":2}, .....] 

我对使用简单的列表理解很满意,目前我正在循环列表 L 两次。

A = [d for d in L if d["b"] == 0] 
B = [d for d in L if d["b"] != 0] 

显然这不是最有效的方法。

else 子句在列表推导功能中似乎不可用。

我可以通过列表理解来做我想做的事吗?

有更好的方法吗?

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

谢谢!

更新: 感谢大家的意见和想法!对我来说最容易阅读的是 Thomas 的那本。但我也会考虑亚历克斯的建议。我之前没有找到任何对集合模块的引用。

请您参考如下方法:

不要使用列表理解。列表理解适用于需要单个列表结果的情况。你显然不会 :) 使用常规的 for 循环:

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

您可以通过 (A, B)[item['b'] != 0].append(item) 来缩短代码段,但何必呢?