这可能是一个简单的问题,但我自己无法找到直接的答案。
给定两个列表,一个只有 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/