2017-08-07 4 views
-1

enter image description hereは、私がdictsのリストに上記の入力フォーマットをフォーマットしようとしている

をのdictするキーと値のペアを追加します。

基本的には、ファイルの内容をdictsのリストに変換することが必要です。しかし、コードを実行するたびに、同じ出力が得られます。[{''類似:類似5、 'スコア':スコア5、 '複合':smi}]。これは、私の目的が5つのディクテーション(各行に1つずつ)を作成することだけで、1つのディクトが作成されたことを意味します。 誰かが私にこれを解決する手助けできますか?

dt = [] # Creates a list to store dicts 
with open('sample_text.out') as f: # Opens the target text file 
    for line in f: 

     if line.startswith('Compound'): 
      smi = line.split()[1] 
      dt.append({'Compound' : smi}) # Add smi as a value in a dict inside the list 'dt' 

     else: # This part will iterate over the next few lines, split them and add them to the growing list of dicts 

      new_line = line.split() 
      similar = new_line[0] 
      score = new_line[1] 
      print new_line 
      for dicts in dt: 
       dicts['Similar'] = similar 
       dicts['Score'] = score 


print dt 
+0

どの時点で? dt:dicts ['teste'] = new_line'は意図したものですか?) – user2357112

+0

dictを作成するこのコードの唯一の部分は '{'Compound':smi}'です。 「化合物」から始まる。 – user2357112

+0

私が本当に欲しいのは、5つのディクテーション(各行に1つ)を作成することです。しかし、私はそれを正しくしていない。 –

答えて

1

これは、あなたが望むもの、あなたのコードと出力の設計上の欠陥のいくつかを解決しようとする:あなたは、第二のdictを作成するには、このコードを期待していた

dictionaries = [] # Creates a list to store dicts 

with open('sample_text.out') as input_file: # Opens the target text file 

    compound = None 

    for line in input_file: 

     if line.startswith('Compound'): 
      _, smi = line.split() 
      compound = smi 
     else: 
      similar, score = line.split() 
      dictionaries.append({'Similar': similar, 'Score': score}) 
      dictionaries[-1]['Compound'] = compound 

print(dictionaries) 
+0

ありがとう、cdlane!出力は正常です。しかし、私はライン_、smi = line.split()を理解できませんでした。なぜ私はsmi = line.split()を書くことができないのですか? –

+0

@MarcosSantana、あなたは 'smi = line.split()[1]'を使っていました。これは '_、smi = line.split()'への変換でした。分割して、2番目だけが必要です。いずれにしても、できるだけ数字を避ける傾向があります。 – cdlane

関連する問題