次のタイプのデータを含む辞書があるとします。
{'abc':'AGCTAC', 'def': 'AGGTAC', 'ghi':'AGGTAG'}
各位置の値を表示する関数を実行できるようにしたい、たとえば
(('A','A','A'),('G','G','G'),('C','G','G'))
そして、人々がコレクションカウンターで提案したようなカウンターを実行することができます。
次のタイプのデータを含む辞書があるとします。
{'abc':'AGCTAC', 'def': 'AGGTAC', 'ghi':'AGGTAG'}
各位置の値を表示する関数を実行できるようにしたい、たとえば
(('A','A','A'),('G','G','G'),('C','G','G'))
そして、人々がコレクションカウンターで提案したようなカウンターを実行することができます。
>>> d = {'abc':'AGCTAC', 'def': 'AGGTAC', 'ghi':'AGGTAG'}
>>> zip(*d.values())
[('A', 'A', 'A'), ('G', 'G', 'G'), ('C', 'G', 'G'), ('T', 'T', 'T'), ('A', 'A', 'A'), ('C', 'G', 'C')]
dictは順序付けられていないため、タプル内の要素は異なる順序で発生する可能性があることに注意してください。ただし、順序はすべてのタプルで同じになります
tuple()
Python3では、zipは「zipオブジェクト」を返すため、ラップアラウンドする必要があります
>>> tuple(zip(*d.values()))
(('A', 'A', 'A'), ('G', 'G', 'G'), ('C', 'G', 'G'), ('T', 'T', 'T'), ('A', 'A', 'A'), ('C', 'G', 'C'))
中間タプルが必要ない場合は、Counter
>>> from collections import Counter
>>> Counter(zip(*d.values()))
Counter({('A', 'A', 'A'): 2, ('C', 'G', 'G'): 1, ('G', 'G', 'G'): 1, ('T', 'T', 'T'): 1, ('C', 'G', 'C'): 1})