0

次のコードを書きました。

def all_di(fl):
    dmm = {}
    for k in range(2):
        for i in fl:
            for m in range (len(i)-1):
                temp = i[m:m+k+1]
                if temp in dmm:
                    dmm[temp] += 1.0
                else:
                    dmm[temp] = 1.0
##  return dmm
    p = raw_input("Enter a 2 AA long seq:")
    sum = 0
    for x,y in dmm.iteritems():
        if x == p:
            n1 = y
    for l,m in dmm.iteritems():
        if l[0] == p[0]:
            sum = sum + m
    print float(n1)/float(sum)

all_di(inh) 

inh =の場合{'VE':16,'GF':19,'VF':23,'GG' :2}

コードは次のように機能します。

Enter a 2 AA long seq: VE

結果は = 16/(16+23)=0.41

仕組み: この関数は、dmm入力されたキーに似たキーを辞書で検索しますinput(ここでは「VE」の例を使用)。その値を保存し、最初の文字が共通しているすべてのキーと値のペアを検索し、そのすべての値を加算して分数を返します。

VE = 16
**V**E + **V**F = 39
= 16/39 = 0.41

私が望むもの:関数をそのまま維持し、辞書内のすべてのキーと値のペアを反復処理し、その小数値を別の辞書に格納する二次辞書が必要です。

new_dict = {'VE' : 0.41, 'GF':0.90,'VF':0.51, 'GG': 0.09}

print私のプログラムの出力であるため、ステートメントを削除したくありません。new_dictただし、さらに作業を行うにはが必要です。

4

1 に答える 1

1
def all_di(fl,p=0):
  dmm = {}
  interactive = p == 0
  if interactive:
    p = raw_input("Enter a 2 AA long seq:")
  if p in fl: 
    numer = fl[p]
    denom = 0.0 
    for t in fl: 
      if t[0] == p[0]:
        denom = denom + fl[t]
  if interactive:
    print numer / denom
  return numer / denom

inh = {'VE':16,'GF':19,'VF':23,'GG' :2} 
all_di(inh)
new_dict =  {x:all_di(inh, x) for x in inh}
print new_dict
于 2013-03-27T01:40:57.990 に答える