python - 根据第二个列表过滤列表

标签 python filter list-comprehension

这可能是一个简单的问题,但我自己无法找到直接的答案。

给定两个列表,一个只有 ID 列表,另一个有所有数据,包括一些我们不关心的 ID:
all_data = [['abc', 123], ['cde', 234], ['fgh', 345]]
ids = ['abc', 'fgh']

获得以下输出的最佳方法是什么,注意它只保留那些具有相同 ID 的输出: new_data = [['abc', 123], ['fgh', 345]]

我当前的代码是这样的:

for x in all_data:
    for y in ids:
         if x[0] == y:
              new_data.append(x)

您会采取哪些不同的做法?是否有一个内置函数可以处理我在某处遗漏的这个问题?

(我说“类似”是因为它实际上是一个很长的序列,涉及集合和所有这些,这就是为什么没有“pythonic”单行代码可以共享的原因。)

更新: 嗯,你们很有趣。

我让它变得更难一点怎么样?如果我有一个字典 all_data_dict 而不是“all_data”,它有几个与“all_data”格式相同的列表条目怎么办?按照规则,我一定会接受原始问题的答案,但如果你们都想继续享受乐趣,让我们看看我们得到了什么!

最佳答案

使用列表理解,其中有条件地检查集合中的成员资格:

>>> all_data = [['abc', 123], ['cde', 234], ['fgh', 345]]
>>> ids = ['abc', 'fgh']
>>> id_set = set(ids)
>>> [s for s in all_data if s[0] in id_set]
[['abc', 123], ['fgh', 345]]

关于python - 根据第二个列表过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892337/

相关文章:

excel - PowerShell 中的高级过滤器

python - 从列表项的不同组合创建元素列表

python - 在 PyQT4 GUI 中嵌入的 funcAnimation 中使用 blitting

由于区域设置,Python 测试在 Gentoo 上通过而在 Ubuntu 上失败?

python - 带子图的猫图有限制吗?

java - 服务工厂实例化的 bean 如何访问 httpServletRequest 对象?

python - Python 上的 Theano 共享变量

javascript - 过滤器返回 true 或 false

python - 按字典 python 列表中值的总和排序

python - List Comprehension 在 Python 中是如何工作的?