我在python中有一个字典,例如以下示例:
小例子:
d = {'chr12:112843810-112843817': 'CGTAGAG', 'chr16:48394513-48394520': 'TTTAAAC'}
此词典的值是一个字符序列,这些字符只能是A, C, G or T
。但是我想制作一个新的字典,其中的键是相似的,但值是不同的。实际上,在新词典中,字符序列会有2个变化:
1-必须反转(方向)。例如“ AGT
”将是“ TGA
”。
2-我要转换:A-> T,T-> A,C-> G,G-> C。
考虑到以上两项,AGTCC
将转换为GGACT
这是小示例的预期输出:
预期输出:
d2 = {'chr12:112843810-112843817': 'CTCTACG', 'chr16:48394513-48394520': 'GTTTAAA'}
我正在尝试使用以下代码在python中做到这一点:
def reverse_complement(dict):
for v in dict:
complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
return [complement[base] for base in v[::-1]]
,但不返回想要获得的结果。你知道如何解决吗?
答案 0 :(得分:4)
fetch("data:application/pdf;base64," + vm.documentData.base64Document).then(function(response) {
response.blob().then(function(blob) {
document.querySelector("iframe").src = URL.createObjectURL(blob) + "#view=fit";
});
});
迭代键,而不是值。您应该使用for v in dict
遍历键值对。
items
语句使函数在第一次迭代后进入return
。
return
是一个错误的变量名(dict
可能更糟,但至少它不会掩盖内置名称)
您可以使用字典功能:
d
或使用str.translate
:
def reverse_complement(d):
complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'}
return {k: ''.join(complement[base] for base in v[::-1]) for k, v in d.items()}
答案 1 :(得分:0)
类似于@DeepSpace的第一个答案,您可以使用reversed()
就地映射补语:
d2 = {k: ''.join(map(complements.get, reversed(v))) for k, v in d.items()}
print(d2)
# {'chr12:112843810-112843817': 'CTCTACG', 'chr16:48394513-48394520': 'GTTTAAA'}
您还可以重建新词典:
''.join(map(complements.get, reversed(v)))
注意: ''.join(complemements.get(x) for x in reversed(v))
只是编写#ifndef SINGLETON_H
#define SINGLETON_H
template <typename C, typename ...Args>
class singleton
{
private:
singleton() = default;
static C* m_instance;
public:
~singleton()
{
delete m_instance;
m_instance = nullptr;
}
static C& instance(Args...args)
{
if (m_instance == nullptr)
m_instance = new C(args...);
return *m_instance;
}
};
template <typename C, typename ...Args>
C* singleton<C, Args...>::m_instance = nullptr;
#endif // SINGLETON_H
的另一种方式。
答案 2 :(得分:0)
这里是另一种使用字符串替换方法的解决方案。这可能会更快。 补码方法首先将字符串设置为小写,然后根据小写到大写进行重命名。
“ [::-1]”颠倒顺序,其余为字典理解,可创建新字典
complement = lambda s: s.lower().replace("g","C").replace("c","G").replace("t","A").replace("a","T")
d2 = { k:complement(v)[::-1] for k,v in d.items() }