2016-10-19 2 views
1

У меня есть следующие два списка:Хранить одинаковые значения по умолчанию в Словаре

prefix = ['AGG', 'CAG', 'CAG', 'GAG', 'GGA', 'GGG', 'GGG'] 
suffix = ['GGG', 'AGG', 'AGG', 'AGG', 'GAG', 'GGA', 'GGG'] 

Я пытаюсь использовать defaultdict, чтобы получить этот результат:

AGG -> GGG 
CAG -> AGG,AGG 
GAG -> AGG 
GGA -> GAG 
GGG -> GGA,GGG 

(Да это проблема Розалинда для тех, из вас, кто знает. Я ДЕЙСТВИТЕЛЬНО хочу научиться эффективно использовать словари, так что я НЕ ищу ответы на домашнюю работу. Просто помогите с помощью слова.)

Это мой код:

from collections import defaultdict 
nodes = defaultdict(set) 
for pre, suf in zip(prefix, suffix): 
    nodes[pre].add(suf) 
for k,v in nodes.items(): 
    print(k,v) 

Это мой результат:

CAG {'AGG'} 
GAG {'AGG'} 
GGG {'GGG', 'GGA'} 
AGG {'GGG'} 
GGA {'GAG'} 

Поэтому у меня есть два вопроса:

1) Мне нужно AGG, значение для CAG, должны быть сохранены в виде двух идентичных экземпляров.

2) Я не могу понять, как печатать из моего словаря красиво, без скобок и цитат и добавлять в стрелку.

Спасибо заранее!

ответ

2

Используйте defaultdict из list, а не set. Установки удаляют дубликаты.

Ваш код уже хорошо, вы просто должны изменить

nodes[pre].add(suf) 

к

nodes[pre].append(suf) 

Для печати, это будет как

print('{} -> {}'.format(k, ','.join(v))) 
+0

Спасибо вам много !! Работает отлично! – Andrade