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

标签 python list list-comprehension

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

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) 来缩短代码段,但何必呢?

关于python - 如何通过列表理解或其他方式将一个列表一分为二,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2119112/

相关文章:

Python 从变量 (i,20) 开始迭代范围

python - 使用列表理解 : index out of range 将列表的元素除以整数

python - 如何记录和测试 Python 2 中形式参数所需的接口(interface)?

python - 实验设置中的自动化脚本

python - 带连字符的数字或带连字符的数字字符串

c# - 如何删除递归嵌套列表中的重复项

java - 如何使用 Gson 将对象的 JSON 字符串转换为 ArrayList?

python - 自定义容器 : what else do I need in the function. json 文件中的 Azure 函数和 TimerTrigger?

Python 列表理解镜像值

python - CSV 对象的列表理解行为