#python #defaultdict
#python #defaultdict
Вопрос:
У меня есть следующие два списка:
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) Я не могу понять, как печатать из моего словаря красиво, без скобок и кавычек и добавлять стрелку.
Заранее благодарю вас!
Ответ №1:
Используйте defaultdict
of list
вместо set
. Устанавливает удаляет дубликаты.
Ваш код уже в порядке, вам просто нужно изменить
nodes[pre].add(suf)
Для
nodes[pre].append(suf)
Для печати это будет похоже
print('{} -> {}'.format(k, ','.join(v)))
Комментарии:
1. Большое вам спасибо!! Работает отлично!