我有一组如下所示的列表:
conditions = [
["condition1", ["sample1", "sample2", "sample3"]],
["condition2", ["sample4", "sample5", "sample6"],
...]
如何在 Python 中高效优雅地完成以下操作?
找到某个条件下的所有元素?
例如获取条件 2 中的所有样本。现在我可以:
for cond in conditions: cond_name, samples = cond if cond_name == requested_cond: return samples但这很笨重。
查找条件列表的有序并集?例如。
ordered_union(["condition1", "condition2"], conditions)应该返回:["sample1", "sample2", "sample3", "sample4", "sample5", "sample6"]
我怎样才能在 Python 中有效地做到这一点?可能有一个聪明的类轮?
请您参考如下方法:
这看起来更像是 dict 的工作:
conditions = {
"condition1": ["sample1", "sample2", "sample3"],
"condition2": ["sample4", "sample5", "sample6"],
...}
然后您可以使用
获得“有序联合”>>> conditions["condition1"]+conditions["condition2"]
['sample1', 'sample2', 'sample3', 'sample4', 'sample5', 'sample6']
在 Python 3.1 或 2.7 中,您可以使用 OrderedDict 来保留顺序:
from collections import OrderedDict
conditions = OrderedDict([
["condition1", ["sample1", "sample2", "sample3"]],
["condition2", ["sample4", "sample5", "sample6"]]
])
然后您可以获得“有序联合”,也适用于任意大小的 OrderedDicts:
>>> import itertools
>>> [item for item in itertools.chain(*conditions.values())]
['sample1', 'sample2', 'sample3', 'sample4', 'sample5', 'sample6']
