2012-05-14 33 views
1

我有一系列的基因,我想与属性的列表和颜色相关联:地图两个列表成为一个倒置的字典

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' } 

意见建议?

回答

6

你已经拥有了你需要的一切,基因与属性的联系。其他的只是一种自我解决。

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

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 
+0

良好的通话。我可以让这个类也有gene.name,并做倒置[prop] = [gene.color,gene.name]谢谢! – zach

1

如果你只是想几个简单的语句来做到这一点:

>>> gene_A_property = ['a','b','c'] 
>>> gene_B_property = ['d','e','f'] 
>>> ld={k:['red','gene_A'] for k in gene_A_property} 
>>> ld.update({k:['blue','gene_B'] for k in gene_B_property}) 
>>> ld 
{ 'a': ['red', 'gene_A'], 
    'c': ['red', 'gene_A'], 
    'b': ['red', 'gene_A'], 
    'e': ['blue', 'gene_B'], 
    'd': ['blue', 'gene_B'], 
    'f': ['blue', 'gene_B'] 
}