1

各単語にスコアと標準偏差が与えられた単語のリストを含むファイルから辞書を実行できるpythonプログラムを実行しようとしています。私のプログラムは次のようになります。

theFile = open('word-happiness.csv' , 'r')

theFile.close()

def make_happiness_table(filename):
   '''make_happiness_table: string -> dict
      creates a dictionary of happiness scores from the given file'''
   with open(filename) as f:
      d = dict( line.split('    ')  for line in f)
   return d

make_happiness_table("word-happiness.csv")

table = make_happiness_table("word-happiness.csv")
(score, stddev) = table['hunger']
print("the score for 'hunger' is %f" % score)

私の .csv ファイルは次の形式です

word{TAB}score{TAB}standard_deviation

私はその方法で辞書を作成しようとしています。関数から「空腹」などの単語を出力し、そのスコアと標準偏差を取得できるように、そのような辞書を作成するにはどうすればよいですか?

4

2 に答える 2

1

単語にスペースがないことが確実な場合は、行を分割するだけです。

word, score, stddev = line.split()

ただし、単語にスペースを含めることができる場合は、タブ文字\tを使用して分割します。

word, score, stddev = line.split('\t')

ただし、単語自体にタブがある可能性がある非常に一般的なケースでは、 csv モジュールを使用します

reader = csv.reader(filename, dialect='excel-tab')
for word, score, stddev  in reader:
    ...

そして、単語とスコアのdict、stddevなどを作成できます

word_dict[word] = (score, stddev)
于 2012-10-18T15:18:47.967 に答える
1
def make_happiness_table(filename):
   with open(filename) as f:
      d = dict()
      for line in f:
         word,score,std = line.split() #splits on any consecutive runs of whitspace
         d[word]=score,std # May want to make floats:  `d[word] = float(score),float(std)`
   return d

word文字を入れることができるが、tab3 つのフィールド (word、score、std) しかないことが保証されている場合は、文字列を右側から分割し ( )、2 回だけ分割することができますstr.rsplit(3 つのフィールドが終わり)。例えばword,score,std = line.rsplit(None,2)

上記のコメントで述べたように、csvモジュールを使用してこれらの種類のファイルを読み取ることもcsvできます。フィールドを「引用」できる場合は本当に優れています。例えば:

"this is field 0" "this is field 1" "this is field 2"

そのシナリオがない場合は、問題なく機能することがわかりますstr.split


また、無関係ですが、コードはmake_happiness_table2回呼び出します(戻り値を何にも割り当てないのは初めて)。最初の呼び出しは役に立ちません (ファイルを読み取って、決して使用できない辞書を作成するだけです)。最後に、スクリプトの先頭にあるopening とcloseingtheFileも無駄です。ファイルに対して何もしないからです。

于 2012-10-18T15:15:46.080 に答える