Python:更改字典中不匹配键的值

2024-07-05 15:01:02 发布

您现在位置:Python中文网/ 问答频道 /正文

该代码需要找到字符串(基因组)中最常见的k-mers(k个字母的子字符串)与d不匹配。在过去,我必须找到最常见的k-mer,而不存在不匹配,我正在尝试最小程度地修改我的代码。要做到这一点,我必须能够增加字典中的值,这些值的键与我传递的字符串的键不同。可能吗?下面是我的代码。有没有办法做到我在评论中所写的HammingDistance()只计算两个字符串之间的差异数

import operator

def MostFrequentKmer (Text, k, d):
    kmerDict = {}
    freqKmers = list()

    for i in range (0, len(Text)-k+1):
        kmer = Text[i:i+k]
        if kmer in kmerDict:
            kmerDict[kmer] += 1

        #elif a key exists for which HammingDistance(key, kmer) <= d, then increment the value associated with that key

        else:
            kmerDict[kmer] = 1

    maxVal = max(zip(kmerDict.values()))[0]

    for k, v in kmerDict.items():
        if v == maxVal:
            freqKmers.append(k)

    print(sorted(freqKmers))


def HammingDistance (str1, str2):
    hamDis = 0
    for i in range(0, len(str1)):
        if str1[i] != str2[i]:
            hamDis += 1
    return hamDis

示例IO为:
输入-(“ACGTTGCATGTCGCATGATGATGAGGT”,4,1)
输出-[“ATGC”、“ATGT”、“GATG”]


Tags: key字符串代码textinforifdef
1条回答
网友
1楼 · 发布于 2024-07-05 15:01:02

假设您希望1)增加所有最近关键点的计数,2)如果没有最近关键点,则添加一个条目,下面的操作就是您想要的

else:
  close_keys = [k for k in kmerDict.keys() if HammingDistance(k, kmer) <= d]
  if close_keys:
    for k in close_keys:
      kmerDict[k] += 1
  else:
    kmerDict[k] = 1

作为一个旁白,请考虑以下Python命名约定,例如,更改^ {CD1>}到^ {CD2>}。

相关问题 更多 >