在默认字典

时间:2016-10-19 03:52:11

标签: 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

(是的,对于那些知道的人来说,这是一个Rosalind问题。我真的想学习如何有效地使用词典,所以我不是在寻找作业答案。只需要字典帮助。)

这是我的代码:

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 个答案:

答案 0 :(得分:2)

使用defaultdict list代替set。集删除重复项。

您的代码已经很好了,您只需要更改

即可
nodes[pre].add(suf)

nodes[pre].append(suf)

对于打印,它就像

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