Skip to main content
 首页 » 编程设计

python之有效地在python关联列表中查找元素

2025年05月04日8虾米哥

我有一组如下所示的列表:

conditions = [ 
["condition1", ["sample1", "sample2", "sample3"]], 
["condition2", ["sample4", "sample5", "sample6"], 
...] 

如何在 Python 中高效优雅地完成以下操作?

  1. 找到某个条件下的所有元素?

    例如获取条件 2 中的所有样本。现在我可以:

    for cond in conditions: 
      cond_name, samples = cond 
      if cond_name == requested_cond: 
        return samples 
    

    但这很笨重。

  2. 查找条件列表的有序并集?例如。 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']