如何返回由2个字母的每个单词出现的次数组成的字典

问题描述

编写一个以以下方式打印字典的函数

键:GT-值:1
键:CT-值:8


代码

private fun showDialog() {

    BottomSheetDialog(requireActivity(),R.style.CustomizedBottomDialogStyle).apply {

        window?.setSoftInputMode(WindowManager.LayoutParams.soFT_INPUT_ADJUST_RESIZE)

        setonShowListener {
            Handler().post {
                val bottomSheet = findViewById<View>(R.id.design_bottom_sheet) as? FrameLayout
                bottomSheet?.let {
                    BottomSheetBehavior.from(it).state = STATE_EXPANDED
                }
            }
        }

        setContentView(R.layout.dialog_layout)

        // Your code goes here....

        show()
    }
}

我得到了def occurrences2letters(sequence): dico = {} for i in range(len(sequence)-1): key = sequence[i]+sequence[i+1] dico[key] = dico.get(key,0) + 1 return dico

现在,我想要另一个代码来帮助我在开始时显示结果。目前,我已经编写了代码的那部分,但是没有用

{'AC': 1,'CC': 3,'CT': 8,'TA': 7,'AG': 7,'GC': 7,'CA': 1,'AT': 2,'TG': 2,'GT': 1,'GA': 1,'AA': 1,'TC': 2,'CG': 1,'GG': 1,'TT': 2}

解决方法

def occurrences2letters(sequence): 
    dico = {}
    for i in range(len(sequence)-1): 
        key = sequence[i]+sequence[i+1] 
        dico[key] = dico.get(key,0) + 1
    return dico

def printDico(dico):
    for key in dico:
        print("Key : "+str(key)+" - Value : "+str(dico[key]))

spam = "ACCTAGCCATGTAGAATCGCCTAGGCTTTAGCTAGCTCTAGCTAGCTG"
dico = occurrences2letters(spam)
printDico(dico)

输出:

Key : AC - Value : 1
Key : CC - Value : 3
Key : CT - Value : 8
... some output left out for brevity
Key : CG - Value : 1
Key : GG - Value : 1
Key : TT - Value : 2

您的occurrences2letters()返回一个字典,您首先需要调用它,将字符串作为参数传递,然后调用printDico(),将第一个函数的字典作为参数传递。

请注意,有更好的方法,例如使用collections.Counter,这是一种遍历键,字典的值对等的更多Python方式。

import collections
import more_itertools # third-party library,instaled from pypi
spam = "ACCTAGCCATGTAGAATCGCCTAGGCTTTAGCTAGCTCTAGCTAGCTG"

for key,value in collections.Counter(more_itertools.windowed(spam,2)).items():
    print(f'Key: {"".join(key)} - Value: {value}')