2012-05-14 3 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

хорошего вызова. я мог бы сделать класс также gen.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'] 
} 
Смежные вопросы