3

以下に示すように、タプルのpythonリストがあります。

listoftups = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('A','B'), ('C','D')] 

このタプルのリスト内の重複の数をカウントし、次のように出力したいと考えています。

A -> B 2
C -> D 2
E -> F 1
G -> H 1

Pythonでこれを行うにはどうすればよいですか? カウンターを使おうと思ったのですが、よくわかりません。ありがとうございました。

4

5 に答える 5

5

使用できますCounter

listoftups = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('A','B'), ('C','D')] 
from collections import Counter 
for k, v in Counter(listoftups).most_common():
    print "{} -> {} {}".format(k[0], k[1], v)

出力

A -> B 2
C -> D 2
G -> H 1
E -> F 1
于 2013-11-09T04:33:41.293 に答える
1
from collections import Counter


tuples = [('A', 'B'), ('C', 'D'), ('E', 'F'), ('G', 'H'), ('A', 'B'), ('C', 'D')]

counted = Counter(tuples).most_common()

s_t = sorted(counted, key=lambda x: x[0][0])

for key, value in s_t:
    print key, value

上記のコードも、タプルの最初の文字列の値に従ってソートします。

コンソール セッション:

>>> from collections import Counter
>>> tuples = [('A', 'B'), ('C', 'D'), ('E', 'F'), ('G', 'H'), ('A', 'B'), ('C', 'D'), ('C', 'D'), ('C', 'D')]
>>> counted = Counter(tuples).most_common()
>>> counted
Out[8]: [(('C', 'D'), 4), (('A', 'B'), 2), (('G', 'H'), 1), (('E', 'F'), 1)]
>>> sorted_tuples = sorted(counted, key=lambda x: x[0][0])
>>> sorted_tuples
Out[10]: [(('A', 'B'), 2), (('C', 'D'), 4), (('E', 'F'), 1), (('G', 'H'), 1)]
于 2013-11-09T06:15:04.137 に答える
1

リストの count メソッドを使用できます。

listoftups = [('A', 'B'), ('C','D'), ('E','F'), ('G','H'), ('A','B'), ('C','D')] 
tup = listoftups.count(('A', 'B')) # returns 2

そしてそれらすべてを辞書に数えます:

result = dict()
for tup in set(listoftups):
    result[tup] = listoftups.count(tup)

または辞書の理解でより簡潔に:

result = {tup:listoftups.count(tup) for tup in set(listoftups)}

次の辞書を取得した後:

result = { ('A', 'B'): 2, ('C', 'D'): 2, ('E','F'): 1, ('G', 'H'): 1}

foureye と同じ方法で印刷するか、次のようにします。

for k, v in result.items():
    print k[0] + "->" + k[1] + " ", v
于 2013-11-09T04:35:54.423 に答える