Сохраняйте идентичные значения в dict по умолчанию

#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. Большое вам спасибо!! Работает отлично!