1

これらの値を含む詩辞書があります。

{cluster1: 0, cluster2: 0, cluster3: 0}

読み込まれたデータファイルがあり、ファイルの各行は、このような辞書の文字列として表されています。

 [ "0,1,0,0,0,0,0,0,0,1,1,No,cluster3"," 0,1,0,0,1,0,0,0,0,1,1,No,cluster2" ]

データファイルの各行(リスト内の文字列として表される)について、辞書を調べてキー値を比較できるようにしたい. cluster1 に部分文字列 "cluster1" 2 または 3 が含まれているかどうかを確認し、それに応じて辞書の値を更新します。したがって、プログラムの目的は、各クラスターの発生をカウントし、これをクラスター番号と各クラスターの対応するカウントを含む辞書として表すことです。

これを行うための構文がよくわかりません。これまでの私のループは次のとおりです。

for verse in verses:
    for clusters[Key] in clusters:
        if clusters[Key] in verse:
            clusters.add(Key, +1) # tries to increment the value of 
                                  # the key if the key is in the string verse.
        else:
            print "not in"

どこに行くべきか、誰かアドバイスをくれませんか?

ありがとう

4

3 に答える 3

4

あなたはかなり近いです。辞書のキーを調べる必要があります。

詩の詩:
  クラスター内の k の場合:
    k が詩の場合:
      クラスター[k] += 1
    それ以外の場合:「含まれていません」と出力
于 2011-04-10T23:47:49.790 に答える
1

defaultdict と rsplit を使用 (右から分割)

verses = [ "0,1,0,0,0,0,0,0,0,1,1,No,cluster3"," 0,1,0,0,1,0,0,0,0,1,1,No,cluster2" ]

from collections import defaultdict

clusters = defaultdict(int)

for verse in verses:
    key = verse.rsplit(',',1)[1]
    clusters[key] += 1

print clusters

出力:

defaultdict(<type 'int'>, {'cluster2': 1, 'cluster3': 1})
于 2011-04-10T23:56:23.170 に答える
0
l=[ "0,1,0,0,0,0,0,0,0,1,1,No,cluster3"," 0,1,0,0,1,0,0,0,0,1,1,No,cluster2" ]
d={'cluster1': 0, 'cluster2': 0, 'cluster3': 0}
for line in l:
    tokens = line.split(',')
    d[tokens[-1]]+=1

print d

戻り値

{'cluster2': 1, 'cluster3': 1, 'cluster1': 0}
于 2011-04-10T23:46:47.233 に答える