Skip to main content
 首页 » 编程设计

python之将两个列表映射到一个倒排字典中

2025年05月04日16bluestorm

我有一系列基因,我想将它们与属性列表和颜色相关联:

gene_A_color = red 
gene_B_color = blue 
 
gene_A_property = ['a','b','c'] 
gene_B_property = ['d','e','f'] 

为了绘图的目的,我想创建一个字典,我可以在其中使用属性值作为键来获取颜色或基因,如下所示:

#lookup dictionary 
{'a': ['red', 'gene_A'] 
 'b': ['red', 'gene_A'] 
 'c': ['red', 'gene_A'] 
 'd': ['blue' 'gene_B'] 
 'e': ['blue' 'gene_B'] 
 'f': ['blue' 'gene_B']} 
lookup[a][0] = red 
lookup[a][1] = gene_A 

我是这样开始的,但只有在我丢失基因名称时才能反转列表:

lookup_dict = defaultdict(list) 
    lookup_dict['red'] =  ['a','b','c'] 
    lookup_dict['blue'] =  ['d','e','f'] 
inverted    = defaultdict(list) 
for k, v in lookup_dict.items(): 
    inverted[v].append( k ) 
 
#inverted 
{'a': 'red' 
 'b': 'red' 
 'c': 'red' 
 'd': 'blue' 
 'e': 'blue' 
 'f': 'blue' } 

建议?

请您参考如下方法:

您已经拥有所需的一切,基因与特性的关联。其他一切都会自行解决。

为什么不用类来表示基因?

class Gene(object): 
    def __init__(self, color, properties): 
        self.color = color 
        self.properties = properties 
 
geneA = Gene('red', ['a', 'b', 'c']) 
geneB = Gene('blue', ['d', 'e', 'f']) 
genes = [geneA, geneB] 
 
inverted = {} 
for gene in genes: 
    for prop in gene.properties: 
        inverted[prop] = gene.color