2016-07-06 1 views
0

dictの古いキーを反復処理しています。私は関数の外側のforループをテストし、目的の結果を達成しましたが、関数に入れると古いキーが返されます。ループは、関数の外部で実行されたときに正しい変更を返し、関数内で実行されたときに変更を表示しません。

フォーラムをトロールしていたが、何も出てこなかった。

edu_dict = { 
     "A.S":"Attended Vocational/Technical", 
     "AAS":"Attended Vocational/Technical",...etc} 

def clean_edu(edu_dict): 

    for i in list(edu_dict): 

     key = i # accesing the key from the edu_dic 
     lower_case = key.lower() # changing the key to lower case 

     char_change = "".maketrans(chars_in, chars_out)   

     clean = lower_case.translate(char_change)  

     y = re.sub(r'\s\s{1,}','',clean) 

     edu_dict[y] = edu_dict.pop(i)  

     return edu_dict 

clean_edu(edu_dict) 
print(edu_dict) 

これは単純な解決策のようですが、私は困惑しています。

+0

これは実行可能なソリューションのようです:http://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference – pproctor

答えて

0

辞書に参照を渡す必要があります。それ以外の場合は、関数内でその辞書のコピーを変更するだけです。関数はこのコピーを変更しますが、関数外では元の辞書は変更されません。

0

私は、あなたがclean_eduへの参照を渡していないか、clean_eduの戻り値を保存していないと思います。いずれの場合も、元のオブジェクトを意図したとおりに変更するのではなく、辞書のコピーをクリーニングしています。次に、元の未修正の辞書を印刷します。

関連する問題