2016-09-29 6 views
-2

辞書のリストをループし、値が存在するかどうかをチェックする必要があります。それが存在する場合、私はこの同じ辞書から別の値をとり、それを別のリストの新しい辞書に格納します。私が持っているものはこれですPython:辞書のリストをループして新しい辞書に値を抽出する

class_copy=[] 
for root, dirs, files in os.walk(files_path+"/TD"): 
    for file in files: 
     file_name=os.path.splitext(file)[0] 
     for d in data_list: 
      if d['id'] == file_name: 
       cc['class']=d['fic'] 
       class_copy.append(cc) 
       break 

私はいくつかのファイルをループします。 data_listは辞書のリストです。これらの辞書はそれぞれファイル名に一致する 'id'を持っているので、値 'id'を持つ辞書 'd'が見つかると辞書 'd'に 'fic'という値をとり、クラス 'の値を格納する' fic '。次に、この辞書をclass_copyという辞書の新しいリストに格納します。

問題は、すべてをループした後、class_copyのすべての辞書が同じであることです。私はループし、dのインスタンスを変更することによって、class_copyの値も変化していると思いますが、どのように値を保持できますか?これを行うより良い方法はありますか?

+1

'class_copy'とその中のオブジェクトをどのように初期化したかを教えてもらって、同じ辞書に複数の参照があることを教えてもらえますか? – TigerhawkT3

+0

@ TigerhawkT3空リストとしてclass_copyを初期化する方法を追加しました – Atirag

答えて

3

あなたが実際に新しい辞書を作成していない、あなたは既存のものを更新している:

cc['class']=d['fic'] 

は、単にキー'class'に関連付けられている値を更新します。コードを次のように変更します。

cc = {'class': d['fic']} 

これは辞書の新しいインスタンスを作成します。

リスト内のすべての項目が同じになる理由は、リスト内の各項目がと同じ辞書であるためです。表示されているように新しい辞書を作成することで、期待どおりリストに独立したインスタンスが作成されます。

+0

もちろんです。素晴らしい仕事をした。ありがとう! – Atirag

0
class_copy.append({'class': d['fic']'}) 
+0

説明無しにあまり役に立たない –