0

次のコードを使用して、辞書を解凍し、各サイトの値を数えています。

result = [Counter(site) for site in zip(*myDict.values())]

出力は次のようになりCounter({'A': 74}), Counter({'G': 72, 'C': 2}) ます。A, T, G, CN

5 つの値のうちの 1 つが 74 未満の場合にのみ、カウンターが値を出力するようにします。したがって、上記の例では、秒のみが出力されます。カウンター内で if ステートメントをどのように使用しますか? さらに、各サイトにラベルを付けるにはどうすればよいですか?

Site 2: 'G': 72, 'C': 2

myDict は次のようになります。

{'abc123': ATGGAGGACGACT, 'def332': ATGCATTGACGC}

ただし、74 のエントリがあります。各値は同じ長さです。基本的に、各値の各サイトが一致しない場合に出力を提供できるカウンターの使用方法がわかりません。したがって、上記のシーケンスでは、4 番目のサイトは一致しません。カウンターに次を出力させたい:

site 4: 'G': 1, 'C': 1
4

2 に答える 2

0

Dict Comprehensionを使用し、値を格納する場合max(Counter(x).values())<74にのみ、を使用enumerate()して数値を取得しSiteます。

>>> mydict={'abc123': 'ATGGAGGACGACT', 'def332': 'ATGCATTGACGC'}
>>> result={'Site {}'.format(i+1):Counter(x) for i,x in enumerate(zip(*mydict.values())) if max(Counter(x).values())<2}
>>> result
{'Site 7': Counter({'T': 1, 'G': 1}), 'Site 6': Counter({'T': 1, 'G': 1}), 'Site 4': Counter({'C': 1, 'G': 1}), 'Site 9': Counter({'A': 1, 'C': 1}), 'Site 8': Counter({'A': 1, 'G': 1}), 'Site 11': Counter({'A': 1, 'G': 1}), 'Site 10': Counter({'C': 1, 'G': 1})}

Counterまたはに変換dict

>>> {'Site {}'.format(i+1):dict(Counter(x)) for i,x in enumerate(zip(*mydict.values())) if max(Counter(x).values())<2}

{'Site 7': {'T': 1, 'G': 1}, 'Site 6': {'T': 1, 'G': 1}, 'Site 4': {'C': 1, 'G': 1}, 'Site 9': {'A': 1, 'C': 1}, 'Site 8': {'A': 1, 'G': 1}, 'Site 11': {'A': 1, 'G': 1}, 'Site 10': {'C': 1, 'G': 1}}
于 2012-09-30T18:34:04.190 に答える
0

enumerateを使用してサイトのインデックスを作成し、Counterのmost_commonメソッドを使用してカウントが 74 未満かどうかを確認できます。2 つの文字列のみを使用した例を次に示します。

from collections import Counter
myDict = {'a':'ATGTTCN','b':'ATTTCCG'}
result = [(i,Counter(site)) for i,site in enumerate(zip(*myDict.values()))]
result = [x for x in result if x[1].most_common()[0][1] < 2]
for site,count in result:
    print 'Site {}: {}'.format(site,str(count)[9:-2])

出力:

Site 2: 'T': 1, 'G': 1
Site 4: 'C': 1, 'T': 1
Site 6: 'G': 1, 'N': 1
于 2012-09-30T18:25:37.693 に答える